解决Vue keep-alive 调用 $destory() 页面不再被缓存的情况
需求:

项目中需要开发一个导航栏,类似浏览器的导航,没有关闭的时候页面缓存,关掉之后,页面随之销毁。(如图)
项目是使用Vue + Vue-Router + Vuex
刚开始使用的方法是:关闭导航标签,直接调用对应的页面的$destory()方法,OK,可以实现关闭页面(下次再打开该页面,将初始化)的功能,但是遇到个问题:
该页面将不再被缓存,也就是说切换导航tab时,页面将不断的被初始化!!!
查了一下文档,找了度娘,没发现解决方法,又去请教G哥,这才发现原来Vue keep-alive真的有这个问题哎,这个是(链接),要么你自己去看,要么看我的解决方法,嘿嘿嘿,不瞎扯啦,上方法,其实Vue的文档里面也写了的这里:
keep-alive 可以传入两种参数,贴一下官方说明:
include 和 exclude 属性允许组件有条件地缓存。二者都可以用逗号分隔字符串、正则表达式或一个数组来表示:
< keep-alive include=”a,b”> < component :is=”view”> < /keep-alive> < !– 正则表达式 (使用 v-bind) –> < keep-alive :include=”/a|b/”> < component :is=”view”> < / keep-alive> < !– 数组 (使用 v-bind) –> < keep-alive :include=”[‘a', ‘b']”> < component :is=”view”> < /keep-alive>`
匹配首先检查组件自身的 name 选项,如果 name 选项不可用,则匹配它的局部注册名称 (父组件 components 选项的>>键值)。匿名组件不能被匹配。
keep-alive 不会在函数式组件中正常工作,因为它们没有缓存实例。
差不多看明白了吧,页面的销毁不一定非得调用$destory() 去做,我理一下思路(include):
首先在vuex里面定义一个数组 includePageNames,这个数组存放的是当前导航栏上显示的页面的名字name(在每个页面的Vue文件中,定义name的值)
当页面打开的时候,将该页面的name加($commit)到includePageNames中
当页面关闭的时候,将includePageNames中该页面对应的name移除掉,这时候该页面液将从缓存中被移除,这不就达到我们想要的结果了吗
具体代码我就不上了,就提一下我遇到的问题:keep-alive 给它传入includePageNames(数组),居然报错,原因是它实际上需要一个正则表达式、或者一个逗号分隔的String,没办法啦,直接将includePageNames.toString()传过去就OK啦
补充知识:vue 页面保留缓存和清除缓存
路由:
routes: [{
path: '/page1',
name: page1',
component: page1',
meta:{
keepAlive:true //true是保存缓存,false是不保存
}
},{
path: '/page2',
name: page2',
component: page2',
meta:{
keepAlive:true
}
}]
页面js:
/**
* 判断是否要清除缓存,beforeRouteLeave与methods等平级
*/
beforeRouteLeave(to, from, next) { //参数(马上去的页面,现在的页面,跳转)
if(判断条件){
to.meta.keepAlive = false //将要去的那个页面的缓存清空
}else{
to.meta.keepAlive = true //将要去的那个页面的缓存保留
}
next();
},
以上这篇解决Vue keep-alive 调用 $destory() 页面不再被缓存的情况就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。
代码知识SEO上一篇 : IDEA使用入门小白操作教程
下一篇 : Echarts.js无法引入问题解决方案
-
SEO外包最佳选择国内专业的白帽SEO机构,熟知搜索算法,各行业企业站优化策略!
SEO公司
-
可定制SEO优化套餐基于整站优化与品牌搜索展现,定制个性化营销推广方案!
SEO套餐
-
SEO入门教程多年积累SEO实战案例,从新手到专家,从入门到精通,海量的SEO学习资料!
SEO教程
-
SEO项目资源高质量SEO项目资源,稀缺性外链,优质文案代写,老域名提权,云主机相关配置折扣!
SEO资源
-
SEO快速建站快速搭建符合搜索引擎友好的企业网站,协助备案,域名选择,服务器配置等相关服务!
SEO建站
-
快速搜索引擎优化建议没有任何SEO机构,可以承诺搜索引擎排名的具体位置,如果有,那么请您多注意!专业的SEO机构,一般情况下只能确保目标关键词进入到首页或者前几页,如果您有相关问题,欢迎咨询!