Home Web Front-end JS Tutorial vue router separates all sub-routes into independent components

vue router separates all sub-routes into independent components

Apr 27, 2018 am 09:26 AM
router separation independent

This time I bring you vue router to separate all sub-routes into independent components. vue router allows all sub-routes to be separated into independent components. What are the precautions? . Here is a practical case. Let’s take a look. one time.

vue-router's dynamic routing

vue-router官网上面是这样说的
// 带查询参数,变成 /register?plan=private
router.push({ path: 'register', query: { plan: 'private' }})
然后,我就这样写了:
this.$router.push({path:'manage', query: {id: 'tasklist'}})1
结果很明显,失败了。然后我就默默的再次看了一下官网,结果发现了这句话
// 命名的路由
router.push({ name: 'user', params: { userId: 123 }})
// 带查询参数,变成 /register?plan=private
router.push({ path: 'register', params: { plan: 'private' }})
注意:如果提供了 path,params 会被忽略,上述例子中的 query 并不属于这种情况。取而代之的是下面例子的做法,你需要提供路由的 name 或手写完整的带有参数的 path:
const userId = 123
router.push({ name: 'user', params: { userId }}) // -> /user/123
router.push({ path: `/user/${userId}` }) // -> /user/123
// 这里的 params 不生效
router.push({ path: '/user', params: { userId }}) // -> /user
谨记啊,动态实现二级路由,需要先用变量保存二级路由名称(let router = 'tasklist'),然后调用this.$router.push({path: `/user/${router}`}).
Copy after login

Let's take a look at the solution of making each sub-route an independent component under vue router dynamic routing

Because vue-router adopts a component reuse strategy for nested routing, this is indeed an efficient approach in most scenarios, but if you encounter this situation:

If multiple sub-routes are required to co-exist, and there is a need for frequent switching back and forth, it is very desirable to make each sub-route an independent component, although it can be switched by monitoring the route

watch: {
   '$route'(to) {
    if (to.meta.path === '/page/buy-details') {
     this.id = to.params.id;
     this.state()
    }
   }
  },
Copy after login

Processing updated data in real time. I have always done this before, including the animation page above, but this is really troublesome. To allow users to accurately return to the display state of the page before switching, there are several things to consider. There were too many things, so I came up with a solution:

The sub-routing component does not involve actual business code, it only maintains a list of opened ids. When the routing is switched here, it determines the ids and the ones that have not been opened. Add, loop out the actual sub-routing components through this list, v-show the current id, so that each instance can be independent
I wrote a mixins based on this idea

details -page.js

export default {
 watch: {
  '$route'(to, from) {
   this.detailsLeave(from);
   this.detailsOpen(to);
  }
 },
 data() {
  return {
   pagePath: '',
   pageId: 0,
   pages: {}
  }
 },
 methods: {
  /**
   * 子页面打开触发
   * @param route
   */
  detailsOpen(route) {
   if (this.detailsPathGet(route.path) === this.pagePath) {
    if (!this.pages[route.params.id]) {
     this.$set(this.pages, route.params.id, {
      id: route.params.id,
      scrollTop: 0
     })
    }
    //路由打开 跳转滚动条
    this.pageId = route.params.id;
    this.$nextTick(()=>{
     this.$parent.$el.firstChild.scrollTop = this.pages[route.params.id].scrollTop;
    });
   }
  },
  /**
   * 路由切换触发
   * 判断离开的路由是否是当前页面,如果是则记录滚动条高度
   * @param route
   */
  detailsLeave(route) {
   if (this.detailsPathGet(route.path) === this.pagePath) {
    if (this.pages[route.params.id]) {
     //记录滚动条高度 此处针对ea-admin后台 不同的框架要记录的滚动条el不同
     this.pages[route.params.id].scrollTop = this.$parent.$el.firstChild.scrollTop ;
    }
   }
  },
  /**
   * 子页面关闭函数
   * @param id
   */
  detailsClose(id) {
   delete this.pages[id]
  },
  /**
   * 取路由不含最后一项参数的地址
   * @param path
   * @returns {string}
   */
  detailsPathGet(path) {
   const i = path.lastIndexOf('/');
   return path.substr(0, i);
  }
 },
 mounted() {
  //通过当前路由地址创建页面识别地址 注:只对path: '/user/:id' 有效 当 path: /user/:id/profile 失效
  this.pagePath = this.detailsPathGet(this.$route.path);
  //执行第一次子页面打开
  this.detailsOpen(this.$route);
  //监听标签关闭消息 此处针对ea-admin后台 不同框架监听关闭方式不同
  this.$tabs.onRemove((page, next) => {
   //收到标签关闭回调,判断关闭的是否是当前页面
   if (page._path === this.pagePath) {
    //触发子页面删除
    this.detailsClose(page.id)
   }
   next()
  })
 }
}
Copy after login

Details.vue

<template>
 <p>
  <your-component
    v-for="item in pages"
    :id="item.id"
    :key="item.id"
    v-show="item.id === pageId">
  </your-component>
 </p>
</template>
<script>
 import YourComponent from '';
 import detailsPage from '../mixins/details-page'
 export default {
  name: 'DetailsPage',
  components: {YourComponent},
  mixins: [detailsPage],
 }
</script>
Copy after login

In this way, the component can only focus on processing its own fixed data. Because the component is unique, there is no need to worry about storing the view state for each ID.

I believe you have mastered the method after reading the case in this article. For more exciting information, please pay attention to other related articles on the php Chinese website!

Recommended reading:

How to adapt images in WeChat applet to model height

vue.js front-end and back-end data Detailed explanation of interaction steps

The above is the detailed content of vue router separates all sub-routes into independent components. For more information, please follow other related articles on the PHP Chinese website!

Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

Video Face Swap

Video Face Swap

Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

React Router User Guide: How to implement front-end routing control React Router User Guide: How to implement front-end routing control Sep 29, 2023 pm 05:45 PM

ReactRouter User Guide: How to Implement Front-End Routing Control With the popularity of single-page applications, front-end routing has become an important part that cannot be ignored. As the most popular routing library in the React ecosystem, ReactRouter provides rich functions and easy-to-use APIs, making the implementation of front-end routing very simple and flexible. This article will introduce how to use ReactRouter and provide some specific code examples. To install ReactRouter first, we need

How to use the module system in Java 9 to separate and isolate code How to use the module system in Java 9 to separate and isolate code Jul 30, 2023 pm 07:46 PM

How to use the module system in Java 9 to separate and isolate code As the scale of software continues to expand, the complexity of the code continues to increase. In order to better organize and manage code, Java9 introduced the module system. The emergence of the module system solves the problem of traditional package dependencies, making the separation and isolation of code easier and more flexible. This article will introduce how to use the module system in Java 9 to achieve code separation and isolation. 1. Definition of module In Java9, we can use the module keyword to define

Suggestions on front-end technology selection in Golang front-end and back-end separation development. Suggestions on front-end technology selection in Golang front-end and back-end separation development. Mar 05, 2024 pm 12:12 PM

Title: Suggestions on front-end technology selection in Golang front-end and back-end separation development As the complexity and demands of web applications continue to increase, the front-end and back-end separation development model is becoming more and more popular. In this development model, the backend is responsible for processing business logic, and the frontend is responsible for displaying pages and interacting with users. The two communicate through APIs. For development teams using Golang as a back-end language, choosing the right front-end technology is crucial. This article will discuss the recommended front-end technologies to choose in the separate development of front-end and back-end in Golang, and

The unique advantages of Vue Router Lazy-Loading routing, how to optimize page performance? The unique advantages of Vue Router Lazy-Loading routing, how to optimize page performance? Sep 15, 2023 am 10:36 AM

VueRouter is a routing management plug-in officially provided by Vue.js. It can help us implement page navigation and route switching in Vue applications. The Lazy-Loading feature is a unique advantage of VueRouter, which can greatly optimize page performance. In this article, we will introduce VueRouter’s Lazy-Loading routing feature and provide some practical code examples for optimizing page performance. Lazy-Loading means when needed

What should I do if react router does not display? What should I do if react router does not display? Dec 30, 2022 am 09:30 AM

Solution to react router not displaying: 1. Add browserRouter to the parent routing component to wrap the router; 2. Use "this.props.history.go()" to refresh the component; 3. Add "forcerefresh" to the browserrouter parameter ={true}"; 4. Write a hook function in "<Route>" and call it when leaving or entering this route.

Vue Router Lazy-Loading routing: a trend to help improve page performance Vue Router Lazy-Loading routing: a trend to help improve page performance Sep 15, 2023 am 08:03 AM

VueRouter is the official route manager in the Vue.js framework. It allows developers to switch page content through route mapping, making single-page applications more controllable and easier to maintain. However, as applications become more complex, the loading and parsing of routes can become a performance bottleneck. In order to solve this problem, VueRouter provides a function of lazy loading of routes, which defers the loading of routes until actually needed. Lazy-loading is a loading technology that

Essential for PHP developers: Detailed explanation of the implementation method of MySQL read and write separation Essential for PHP developers: Detailed explanation of the implementation method of MySQL read and write separation Mar 04, 2024 pm 04:36 PM

PHP developers often face database operations during the website development process. As a very popular database management system, MySQL's read-write separation is one of the important means to improve website performance. In PHP development, implementing MySQL read-write separation can greatly improve the website's concurrent access capabilities and user experience. This article will introduce in detail the implementation method of MySQL read-write separation, and provide specific PHP code examples to help PHP developers better understand and apply the read-write separation function. What is MySQL read

How to use router routing to implement jump parameters in vue3 How to use router routing to implement jump parameters in vue3 May 16, 2023 am 10:49 AM

1. Route jump 1. First introduce the API—useRouterimport{useRouter}from'vue-router'2. Define the router variable on the jump page // First define constrouter=useRouter() in the setup 3. Use router.push to jump to the page //String router.push('home')//Object router.push({path:'home'})//

See all articles