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


Posted in Javascript onOctober 30, 2020

需求:

项目中需要开发一个导航栏,类似浏览器的导航,没有关闭的时候页面缓存,关掉之后,页面随之销毁。(如图)

解决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() 页面不再被缓存的情况就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
js异步加载的三种解决方案
Mar 04 Javascript
form表单action提交的js部分与html部分
Jan 07 Javascript
基于JS实现新闻列表无缝向上滚动实例代码
Jan 22 Javascript
详解AngularJS控制器的使用
Mar 09 Javascript
[原创]Bootstrap 中下拉菜单修改成鼠标悬停直接显示
Apr 14 Javascript
AngularJS通过$location获取及改变当前页面的URL
Sep 23 Javascript
jQuery元素选择器实例代码
Feb 06 Javascript
深入理解AngularJS中的ng-bind-html指令
Mar 27 Javascript
Node.js自定义实现文件路由功能
Sep 22 Javascript
Webpack实战加载SVG的方法
Dec 26 Javascript
webpack+vue-cli项目中引入外部非模块格式js的方法
Sep 28 Javascript
vue打包之后生成一个配置文件修改接口的方法
Dec 09 Javascript
vue 通过 Prop 向子组件传递数据的实现方法
Oct 30 #Javascript
微信小程序:报错(in promise) MiniProgramError
Oct 30 #Javascript
vue keep-alive实现多组件嵌套中个别组件存活不销毁的操作
Oct 30 #Javascript
vuecli项目构建SSR服务端渲染的实现
Oct 30 #Javascript
Javascript文本框脚本实现方法解析
Oct 30 #Javascript
vue使用keep-alive实现组件切换时保存原组件数据方法
Oct 30 #Javascript
vue内置组件keep-alive事件动态缓存实例
Oct 30 #Javascript
You might like
用PHP实现将GB编码转换为UTF8
2006/11/25 PHP
PHP学习资料汇总与网址
2007/03/16 PHP
php-msf源码详解
2017/12/25 PHP
ThinkPHP 3.2.3实现加减乘除图片验证码
2018/12/05 PHP
img标签中onerror用法
2009/08/13 Javascript
JavaScript 程序编码规范
2010/11/23 Javascript
jQuery使用数组编写图片无缝向左滚动
2012/12/11 Javascript
jQuery绑定事件监听bind和移除事件监听unbind用法实例详解
2016/01/19 Javascript
JS 循环li添加点击事件 (闭包的应用)
2016/12/10 Javascript
你可能不知道的前端算法之文字避让(inMap)
2018/01/12 Javascript
vue .sync修饰符的使用详解
2018/06/15 Javascript
JavaScript中为事件指定处理程序的五种方式分析
2018/07/27 Javascript
解决echarts 一条柱状图显示两个值,类似进度条的问题
2020/07/20 Javascript
python调用cmd复制文件代码分享
2013/12/27 Python
selenium python浏览器多窗口处理代码示例
2018/01/15 Python
python操作redis方法总结
2018/06/06 Python
python清除字符串前后空格函数的方法
2018/10/21 Python
Django Python 获取请求头信息Content-Range的方法
2019/08/06 Python
使用OpenCV对车道进行实时检测的实现示例代码
2020/06/19 Python
Java Unsafe类实现原理及测试代码
2020/09/15 Python
python如何构建mock接口服务
2021/01/28 Python
英国助听器购物网站:Hearing Direct
2018/08/21 全球购物
俄罗斯购买剧院和演唱会门票网站:Parter.ru
2019/11/09 全球购物
奖学金自我鉴定范文
2013/10/03 职场文书
行政管理专业推荐信
2013/11/02 职场文书
事业单位鉴定材料
2014/05/25 职场文书
大学国际贸易专业自荐信
2014/06/05 职场文书
奥林匹克的口号
2014/06/13 职场文书
2014公司党员自我评价范文
2014/09/11 职场文书
2015年中个人总结范文
2015/03/10 职场文书
舞蹈社团活动总结
2015/05/07 职场文书
签证工作证明模板
2015/06/15 职场文书
退休教师追悼词
2015/06/23 职场文书
感谢信的技巧及范例
2019/05/15 职场文书
Java内存模型之happens-before概念详解
2021/06/13 Java/Android
Python编写冷笑话生成器
2022/04/20 Python