解决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 相关文章推荐
In Javascript Class, how to call the prototype method.(three method)
Jan 09 Javascript
JavaScript 以对象为索引的关联数组
May 19 Javascript
jquery移除button的inline onclick事件(已测试及兼容浏览器)
Jan 25 Javascript
FireBug 调试JS入门教程 如何调试JS
Dec 23 Javascript
JS显示下拉列表框内全部元素的方法
Mar 31 Javascript
分享几种比较简单实用的JavaScript tabel切换
Dec 31 Javascript
浅谈Javascript数组(推荐)
May 17 Javascript
浅析Javascript的自动分号插入(ASI)机制
Sep 29 Javascript
VUE多层路由嵌套实现代码
May 15 Javascript
JavaScript数组基于交换的排序示例【冒泡排序】
Jul 21 Javascript
关于微信小程序登录的那些事
Jan 08 Javascript
Canvas跟随鼠标炫彩小球的实现
Apr 11 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
人大复印资料处理程序_输入篇
2006/10/09 PHP
php ignore_user_abort与register_shutdown_function 使用方法
2009/06/14 PHP
php判断对象是派生自哪个类的方法
2015/06/20 PHP
yii2中关于加密解密的那些事儿
2018/06/12 PHP
PHP连接MySQL数据库的三种方式实例分析【mysql、mysqli、pdo】
2019/11/04 PHP
一些常用的JS功能函数(2009-06-04更新)
2009/06/04 Javascript
FireFox下XML对象转化成字符串的解决方法
2011/12/09 Javascript
node.js使用nodemailer发送邮件实例
2014/03/10 Javascript
BootStrap中的table实现数据填充与分页应用小结
2016/05/26 Javascript
微信小程序 富文本转文本实例详解
2016/10/24 Javascript
JavaScript组成、引入、输出、运算符基础知识讲解
2016/12/08 Javascript
jquery实现多次上传同一张图片
2017/01/09 Javascript
最全的JavaScript开发工具列表 总有一款适合你
2017/06/29 Javascript
基于jQuery Easyui实现登陆框界面
2017/07/10 jQuery
Vue2.0 axios前后端登陆拦截器(实例讲解)
2017/10/27 Javascript
JavaScript基础心法 数据类型
2018/03/05 Javascript
js实现多个倒计时并行 js拼团倒计时
2019/02/25 Javascript
重学 JS:为啥 await 不能用在 forEach 中详解
2019/04/15 Javascript
基于Vue的侧边目录组件的实现
2020/02/05 Javascript
详解ES6数组方法find()、findIndex()的总结
2020/05/12 Javascript
不依任何赖第三方,单纯用vue实现Tree 树形控件的案例
2020/09/21 Javascript
[02:16]深扒TI7聊天轮盘语音出处2
2017/05/11 DOTA
Python计算一个给定时间点前一个月和后一个月第一天的方法
2018/05/29 Python
基于Python的ModbusTCP客户端实现详解
2019/07/13 Python
Python中 CSV格式清洗与转换的实例代码
2019/08/29 Python
调整Jupyter notebook的启动目录操作
2020/04/10 Python
终于搞懂了Keras中multiloss的对应关系介绍
2020/06/22 Python
Python如何合并多个字典或映射
2020/07/24 Python
python绘制趋势图的示例
2020/09/17 Python
python批量修改交换机密码的示例
2020/09/22 Python
Linux内核的同步机制是什么?主要有哪几种内核锁
2016/07/11 面试题
汽车销售经理岗位职责
2014/06/09 职场文书
2015年技术员工作总结
2015/04/10 职场文书
2015公司年度工作总结
2015/05/14 职场文书
员工年度工作总结2015
2015/05/18 职场文书
图文详解nginx日志切割的实现
2022/01/18 Servers