在vue中销毁被keepalive的组件

2,876 阅读1分钟

背景

我相信某些靓仔开发们会遇到这样的需求,你们被要求开发一个类似谷歌浏览器的tab选项卡,该选项卡要求被缓存,于是你就会想到keepalive,而且在选项卡被关闭时要销毁那个组件的实例,释放内存,于是你可能会想到调用组件的$destroy方法,如果你这么做了,你就会发现下次这个组件将不会再被缓存。

下面是一个需求做出来的例子:

111.jpg

首先可以去查找说明文档,你会发现有几个重要的option,没错就是他们(include)。传送门:戳这里

这是使用的示例:

<!-- 逗号分隔字符串 -->
<keep-alive include="a,b">
    <router-view/>
</keep-alive>


<!-- 正则表达式 (使用 `v-bind`) -->
<keep-alive :include="/a|b/">
    <router-view/>
</keep-alive>

<!-- 数组 (使用 `v-bind`) -->
<keep-alive :include="['a', 'b']">
    <router-view/>
</keep-alive>

注意:示例里的a b代表的是组件的name 选项,不是路由里面的那个name!!!

111.jpg

思路

  • 组件中的name起名将与path一致,方便获取。
  • 在vuex中创建一个数组includeName用于存放。
  • 将该数组复制给keepalive的属性include。

以下是我的部分代码,用了max选项是为了限制同时缓存组件的数量。

引用vuex:

computed: {
    ...mapState(['includeName'])
}

布局页面中:

<keep-alive
    :max="10"
    :include="includeName.join(',')"
>
    <router-view/>
</keep-alive>