vue使用keep-alive后清除缓存的方法

 更新时间:2021年08月09日 15:51:51   作者:carlos.chang  
这篇文章主要给大家介绍了关于vue使用keep-alive后清除缓存的相关资料,这个问题在我们日常工作中经常会用到,本文通过示例代码介绍的非常详细,需要的朋友可以参考下

什么是keepalive?

在平常开发中,有部分组件没有必要多次初始化,这时,我们需要将组件进行持久化,使组件的状态维持不变,在下一次展示时,也不会进行重新初始化组件。

也就是说,keepalive 是 Vue 内置的一个组件,可以使被包含的组件保留状态,或避免重新渲染 。也就是所谓的组件缓存

基本用法

<keep-alive>
    <component />  //你的组件
</keep-alive>

需求:从列表页进入详情页,再返回列表页时保留查询条件,但在切换其他tab时,清空查询条件。

解决:保留查询条件很简单,直接引入keep-alive,但是清除的话,vue本身没有api直接清除,所以要单独处理。

参考文章:http://aspedrom.com/5HD5

router/index,拦截路由并做处理:

beforeRouteLeave:function(to, from, next){
    // 增加离开路由时清除keep-alive
    if (from && from.meta.rank && to.meta.rank && from.meta.rank == to.meta.rank)
    {//此处判断是如果返回上一层,你可以根据自己的业务更改此处的判断逻辑,酌情决定是否摧毁本层缓存。
        if (this.$vnode && this.$vnode.data.keepAlive)
        {
            if (this.$vnode.parent && this.$vnode.parent.componentInstance && this.$vnode.parent.componentInstance.cache)
            {
                if (this.$vnode.componentOptions)
                {
                    var key = this.$vnode.key == null
                                ? this.$vnode.componentOptions.Ctor.cid + (this.$vnode.componentOptions.tag ? `::${this.$vnode.componentOptions.tag}` : '')
                                : this.$vnode.key;
                    var cache = this.$vnode.parent.componentInstance.cache;
                    var keys  = this.$vnode.parent.componentInstance.keys;
                    if (cache[key])
                    {
                        if (keys.length) {
                            var index = keys.indexOf(key);
                            if (index > -1) {
                                keys.splice(index, 1);
                            }
                        }
                        delete cache[key];
                    }
                }
            }
        }
        this.$destroy();
    }
    next();
},

同时在路由中添加meta:

{
    // 账号列表
    path: '/account',
    name: 'account',
    component: () => import('../views/account/index.vue'),
    meta: { title: '账号列表' ,rank:1.5}
  },
  {
    // 添加账号
    path: '/accountadd',
    name: 'accountadd',
    component: () => import('../views/account/add.vue'),
    meta: { title: '添加账号' ,rank:2.5}
  },
  {
    // 编辑账号
    path: '/accountedit/:id',
    name: 'accountedit',
    component: () => import('../views/account/add.vue'),
    meta: { title: '编辑账号' ,rank:2.5}
  },
  {
    // 角色列表
    path: '/role',
    name: 'role',
    component: () => import('../views/role/index.vue'),
    meta: { title: '角色列表' ,rank:1.5}
  },

总结

到此这篇关于vue使用keep-alive后清除缓存的文章就介绍到这了,更多相关keep-alive清除缓存内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 带你了解前端的几种包管理器(npm/pnpm等)

    带你了解前端的几种包管理器(npm/pnpm等)

    随着前端工程化的应用越来越广,插件和包的管理也逐渐衍生出很多的管理器,常见的几种包管理器如:npm、cnpm、yarn、pnpm,那你知道这些管理器之间有哪些区别吗?我们一起来逐个认识下它们
    2023-04-04
  • 解决mpvue + vuex 开发微信小程序vuex辅助函数mapState、mapGetters不可用问题

    解决mpvue + vuex 开发微信小程序vuex辅助函数mapState、mapGetters不可用问题

    这篇文章主要介绍了解决mpvue + vuex 开发微信小程序 vuex辅助函数mapState、mapGetters不可用问题,需要的朋友可以参考下
    2018-08-08
  • Vuex中getters和actions的使用补充说明

    Vuex中getters和actions的使用补充说明

    这篇文章主要介绍了在Vuex中关于getters和actions使用的补充作了简要说明,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步
    2021-09-09
  • Vue中的组件详谈

    Vue中的组件详谈

    这篇文章主要介绍了Vue的组件,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-10-10
  • 结合Vue控制字符和字节的显示个数的示例

    结合Vue控制字符和字节的显示个数的示例

    这篇文章主要介绍了结合Vue控制字符和字节的显示个数的示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-05-05
  • 在vue中实现点击选择框阻止弹出层消失的方法

    在vue中实现点击选择框阻止弹出层消失的方法

    今天小编就为大家分享一篇在vue中实现点击选择框阻止弹出层消失的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-09-09
  • vue中watch监听不到变化的解决

    vue中watch监听不到变化的解决

    本文主要介绍了vue中watch监听不到变化的解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-01-01
  • vuejs2.0实现分页组件使用$emit进行事件监听数据传递的方法

    vuejs2.0实现分页组件使用$emit进行事件监听数据传递的方法

    这篇文章主要介绍了vuejs2.0实现分页组件使用$emit进行事件监听数据传递的方法,非常不错,具有参考借鉴价值,,需要的朋友可以参考下
    2017-02-02
  • Vue 中为什么不推荐用index 做 key属性值

    Vue 中为什么不推荐用index 做 key属性值

    Vue 中使用虚拟 dom 且根据 diff 算法进行新旧 DOM 对比,从而更新真实 dom ,key 是虚拟 DOM 对象的唯一标识, 在 diff 算法中 key 起着极其重要的作用,本文讲解 key 的作用以及为什么最好不要使用 index 作为 key 的属性值
    2021-11-11
  • 详解vscode中vue代码颜色插件

    详解vscode中vue代码颜色插件

    vscode的确是前端开发中很好的工具,安装颜色插件,从视觉上是美的享受。这篇文章主要介绍了vscode中vue代码颜色插件 ,需要的朋友可以参考下
    2018-10-10

最新评论