美文网首页
Vue keep-alive,不同路由指向同一个组件,如何分别缓

Vue keep-alive,不同路由指向同一个组件,如何分别缓

作者: Cherry丶小丸子 | 来源:发表于2021-09-14 22:22 被阅读0次

https://blog.csdn.net/yanxiaomu/article/details/100753335

本文重要解决 vue 使用 keep-alive 缓存页面状态时,当不同路由指向同一个组件,如何分别缓存页面状态的问题

1.问题产生

由于新建页面和编辑页面基本相同,所以二个路由页面指向同一个组件,在使用 keep-alive 缓存的时候不能分别缓存这两个页面的状态

问题代码如下
router/index.js
import Vue from 'vue'
import Router from 'vue-router'

Vue.use(Router)
let router = new Router({
    routes: [{
        path: '/newHelloWorld',
        name: 'newHelloWorld',
        meta: {
            type: 'new'
        },
        component: () => import('@/views/operateHelloWorld/operateHelloWorld.vue')
    },{
        path: '/editHelloWorld',
        name: 'editHelloWorld',
        meta: {
            type: 'edit'
        },
        component: () => import('@/views/operateHelloWorld/operateHelloWorld.vue')
    }]
})
export default router;
operateHelloWorld
<template>
    <div>
        <input type="text" v-model="msg">
    </div>
</template>
<script>
    export default {
        name: 'operateHelloWorld',
        data() {
            return {
                msg: ''
            }
        }
    }
</script>
App.vue
<template>
    <div id="app">
        <template>
            <!-- 需要缓存的路由 -->
            <keep-alive :include="['newHelloWorld', 'editHelloWorld']">
                <router-view :key="$route.fullPath"></router-view>
            </keep-alive>
        </template>
    </div>
</template>

问题:这样做会导致两个页面状态完全一样,因为引用的就是同一个组件,keep-alive 缓存的也就是同一个组件

2.问题解决:

不要在 router/index.js 里将多个路由指向同一个组件,而应该新建多个页面组件,每个组件中只是作为 HelloWorld 组件的容器,然后多个路由页面分别指向不同的页面组件,然后在 keep-alive 的 include 属性中加入所有路由组件的 name,就可以实现分别缓存同一组件不同实例的状态了

新建 newHelloWorld.vue
<template>
    <div>
        <hello-world></hello-world>
    </div>
</template>
<script>
    export default {
        name: 'newHelloWorld',
        components:{
            HelloWorld: () => import('@/components/operateHelloWorld/operateHelloWorld.vue')
        }
    }
</script>
新建 editHelloWorld.vue
<template>
    <div>
        <hello-world></hello-world>
    </div>
</template>
<script>
    export default {
        name: 'editHelloWorld',
        components:{
            HelloWorld: () => import('@/components/operateHelloWorld/operateHelloWorld.vue')
        }
    }
</script>
router/index.js
import Vue from 'vue'
import Router from 'vue-router'

Vue.use(Router)
let router = new Router({
    routes: [{
        path: '/newHelloWorld',
        name: 'newHelloWorld',
        meta: {
            type: 'new'
        },
        component: () => import('@/views/newHelloWorld/newHelloWorld.vue'),
    },{
        path: '/editHelloWorld',
        name: 'editHelloWorld',
        meta: {
            type: 'edit'
        },
        component: () => import('@/views/editHelloWorld/editHelloWorld.vue'),
    }]
})
export default router;
App.vue 关键代码
<template>
    <div id="app">
        <template>
            <!-- 需要缓存的路由 -->
            <keep-alive :include="['newHelloWorld', 'editHelloWorld']">
                <router-view :key="$route.fullPath"></router-view>
            </keep-alive>
        </template>
    </div>
</template>

这样就可以啦,两个HelloWorld 组件就可以分别缓存状态啦,其实只是一开始想错了,换个思路就可以了

不要把路由直接指向同一个组件,而是用两个路由页面组件作为容器,包裹相同的组件

如果需要动态设置路由 keep-alive,请结合 https://www.jianshu.com/p/cd422ab7c267

相关文章

  • Vue keep-alive,不同路由指向同一个组件,如何分别缓

    https://blog.csdn.net/yanxiaomu/article/details/100753335...

  • vue中动态路由组件缓存及生命周期函数

    vue动态路由组件缓存 是Vue的内置组件,能在组件切换过程中将状态保留在内存中,防止重复...

  • vue小结

    1.vue常用对象 2. Vue中watch的用法 (1)监听route使用场景:当两个路由指向同一个组件是,修改...

  • 浅谈 vue项目优化

    1.路由懒加载 使用vue-router的方法 2.图片懒加载 组件缓存 使用vue的,详...

  • vue动态路由与vue路由传参

    动态路由: 当我们很多个页面或者组件都要被很多次重复利用的时候,我们的路由都指向同一个组件,这时候从不同组件进入一...

  • vue 的keep-alive

    vue 的keep-alive Vue 实现组件信息的缓存 当我们在开发vue的项目过程中,避免不了在路由切换到其...

  • 与Vue.js的第九天

    今天学习了路由 路由 路由 路由vue-router是vue的核心组件根据不同的url访问不同页面配合单页面使用 ...

  • 摸vue-router

    一.路由的理解 路由:就是帮助你找到东西的导游(也是路标),在vue中路由指向的是组件,需要怎么展示就把对应的组件...

  • vue性能优化

    在vue中,在做路由跳转时,我们通常希望去缓存那些活跃的动态组件,我们就会想到用keep-alive去缓存组件。但...

  • vue2.0中keep-alive实践

    vue2.0中keep-alive实践 vue2.0提供了一个keep-alive组件,用来缓存组件,避免多次加载...

网友评论

      本文标题:Vue keep-alive,不同路由指向同一个组件,如何分别缓

      本文链接:https://www.haomeiwen.com/subject/rrjhgltx.html