解决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”> < ponent :is=”view”> < /keep-alive> < !– 正则表达式 (使用 v-bind) –> < keep-alive :include=”/a|b/”> < ponent :is=”view”> < / keep-alive> < !– 数组 (使用 v-bind) –> < keep-alive :include=”[‘a', ‘b']”> < ponent :is=”view”> < /keep-alive>`
匹配检查组件自身的 name 选项,如果 name 选项不可用,则匹配它的局部注册名称 (父组件 ponents 选项的>>键值)。匿名组件不能被匹配。
keep-alive 不会在函数式组件中正常工作,因为它们没有缓存实例。
差不多看明白了吧,页面的销毁不一定非得调用$destory() 去做,我理一下思路(include)
在vuex里面定义一个数组 includePageNames,这个数组存放的是当前导航栏上显示的页面的名字name(在每个页面的Vue文件中,定义name的值)
当页面打开的时候,将该页面的name加($mit)到includePageNames中
当页面关闭的时候,将includePageNames中该页面对应的name移除掉,这时候该页面液将从缓存中被移除,这不就达到我们想要的结果了吗
具体代码我就不上了,就提一下我遇到的问题keep-alive 给它传入includePageNames(数组),居然报错,原因是它实际上需要一个正则表达式、或者一个逗号分隔的String,没办法啦,直接将includePageNames.toString()传过去就OK啦
补充知识vue 页面保留缓存和清除缓存
路由
routes: [{ path: '/page1', name: page1', ponent: page1', meta:{ keepAlive:true //true是保存缓存,false是不保存 } },{ path: '/page2', name: page2', ponent: 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。
编程语言
- 甘肃哪有关键词排名优化购买方式有哪些
- 甘肃SEO如何做网站优化
- 河南seo关键词优化怎么做电话营销
- 北京SEO优化如何做QQ群营销
- 来宾百度关键词排名:提升您网站曝光率的关键
- 卢龙关键词优化:提升您网站排名的策略与技巧
- 山东网站优化的注意事项有哪些
- 四川整站优化怎样提升在搜索引擎中的排名
- 疏附整站优化:提升网站性能与用户体验的全新
- 海南seo主要做什么工作售后服务要做到哪些
- 荣昌百度网站优化:提升您网站的搜索引擎排名
- 河北seo网站排名关键词优化如何做SEO
- 江西优化关键词排名推广售后保障一般有哪些
- 古浪SEO优化:提升你的网站可见性
- 西藏网站排名优化怎么把网站排名在百度首页
- 如何提升阳东百度快照排名:详尽指南