vue router separates all sub-routes into independent components
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}`}).
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() } } },
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() }) } }
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>
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!

Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

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

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics



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 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

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

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

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.

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

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

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'})//
