美文网首页vue技术栈Vuevue
VUE 动态移除缓存路由

VUE 动态移除缓存路由

作者: 骑着母猪去买菜 | 来源:发表于2019-07-12 00:39 被阅读120次

VUE 动态移除缓存路由

在缓存路由时,有时候需要将缓存的路由清除掉达到刷新页面数据的效果。方法如下:

  1. 配置路由时,在路由元信息中添加该路由是否需要被缓存的标识:

    // routes.js
    export default [
        {
            path: '/list',
            name: 'list',
            meta: {
                title: '列表',
                notCache: false
            }
        }
    ]
    
  1. <keep-alive> 标签上绑定 include 属性,从 vuex 获取当前缓存的组件名数组:

    <!-- Main.vue -->
    <template>
        <keep-alive :include="cacheList"></keep-alive>
    </template>
    
    <script>
        import {mapGetters} from 'vuex'
        export default {
            name: 'Main',
            computed: {
                ...mapGetters([
                    'tagsList'
                ])
                cacheList() {
                    let cacheList = ['home']
                    if (this.tagsList.length) {
                        cacheList = [
                            ...cacheList,
                            ...this.tagsList.filter(item => {
                                return !(item.meta && item.meta.notCache)
                            }).map(item => item.name)
                        ]
                    }
                    return cacheList
                }
            }
        }
    </script>
    
  1. 每次跳转新路由时,将需要缓存的路由存入 vuex 中:

    <!-- Main.vue -->
    <script>
        export default {
            name: 'Main',
            watch: {
                '$route'(newRoute) {
                    const {name, path, meta, query, params} = newRoute
                    let newList = [...this.tagsList]
                    let index = newList.findIndex(item => item.name === name)
                    if (!meta.notCache && index < 0) {
                        // 需要缓存
                        newList.push({name, path, meta})
                    }
                }
            }
        }
    </script>
    
    // store.js
    export default {
        state: {
            tagsList: []
        },
        mutations: {
            setTagList(state, list) {
                let tagsList = []
                if (list) {
                    tagsList = [...list]
                } else {
                    // 若有存入localstorage中时可考虑
                    // tagsList = getTagsListFromLocalstorage() || []
                }
            }
        },
        getters: {
            tagsList: state => state.tagsList
        }
    }
    
  2. 在跳转后需要删除路由缓存时,将该路由信息从 tagsList 中删除后,重新调用 vuexsetTagList 即可

相关文章

  • VUE 动态移除缓存路由

    VUE 动态移除缓存路由 在缓存路由时,有时候需要将缓存的路由清除掉达到刷新页面数据的效果。方法如下: 配置路由时...

  • vue路由的介绍(二)--vue动态路由和get的传值

    vue动态路由和get的传值---->同属于路由的传参 1,vue动态路由: 动态路由的配置: ①,在配置路由时加...

  • Vue应用

    Vue项目 Vue结构 Vue项目打包与发布 Vue语法二 Vue网络请求 Vue路由 动态路由 编程式路由导航

  • vue性能优化

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

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

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

  • 手写 Vue Router、手写响应式实现、虚拟 DOM 和 D

    Vue-Router 原理实现 一、Vue-Router 动态路由 二、Vue-Router 嵌套路由 三、Vue...

  • vue-router @4.x 和 @3.x 对比

    1. 创建实例 2. 路由重定向 vue2.x使用路由选项redirect设置路由自动调整,vue3.x中移除了这...

  • Vue路由

    一、Vue路由基础用法: 二、Vue路由配置的抽出 三、路由动态传值: 四、路由的跳转方式: 五、路由的hash模...

  • Vue常见面试题

    1.怎么定义vue-router的动态路由?怎么获取传递过来的动态参数? 何为动态路由?能够提供参数的路由即为动态...

  • vue中的路由

    vue中4中路由包含: 1、动态路由2、嵌套路由3、编程式路由4、命名式路由 1、动态路由 2、嵌套路由 3、编程...

网友评论

    本文标题:VUE 动态移除缓存路由

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