解决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 相关文章推荐
jQuery DIV弹出效果实现代码
Jul 03 Javascript
JQuery autocomplete 使用手册
Apr 01 Javascript
JavaScript 模式之工厂模式(Factory)应用介绍
Nov 15 Javascript
js中arguments,caller,callee,apply的用法小结
Jan 28 Javascript
中止javascript执行的方法
Feb 14 Javascript
第四章之BootStrap表单与图片
Apr 25 Javascript
浅谈jquery上下滑动的注意事项
Oct 13 Javascript
JS中去掉array中重复元素的方法
May 26 Javascript
angular4 共享服务在多个组件中数据通信的示例
Mar 30 Javascript
vue解决花括号数据绑定不成功的问题
Oct 30 Javascript
Javascript Web Worker使用过程解析
Mar 16 Javascript
JavaScript面试中常考的字符串操作方法大全(包含ES6)
May 10 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
THINKPHP3.2使用soap连接webservice的解决方法
2017/12/13 PHP
如何让您的中波更粗更长 - 中波框形天线制作
2021/03/10 无线电
巧妙破除网页右键禁用的十大绝招
2006/08/12 Javascript
JS中==与===操作符的比较
2009/03/21 Javascript
jQuery 选择器理解
2010/03/16 Javascript
jQuery事件 delegate()使用方法介绍
2012/10/30 Javascript
javascript操作JSON的要领总结
2012/12/09 Javascript
jQuery实现复选框全选/取消全选/反选及获得选择的值
2014/06/12 Javascript
JavaScript中getUTCSeconds()方法的使用详解
2015/06/11 Javascript
jquery实现简单的轮换出现效果实例
2015/07/23 Javascript
一个字符串中出现次数最多的字符 统计这个次数【实现代码】
2016/04/29 Javascript
Bootstrap table使用方法详细介绍
2016/12/09 Javascript
深入理解在JS中通过四种设置事件处理程序的方法
2017/03/02 Javascript
js设置随机切换背景图片的简单实例
2017/11/12 Javascript
在vue中使用Autoprefixed的方法
2018/07/27 Javascript
详解使用VUE搭建后台管理系统(vue-cli更新至3.0)
2018/08/22 Javascript
详解vuex数据传输的两种方式及this.$store undefined的解决办法
2019/08/26 Javascript
JS实现时间校验的代码
2020/05/25 Javascript
python 中的divmod数字处理函数浅析
2017/10/17 Python
Python获取CPU、内存使用率以及网络使用状态代码
2018/02/08 Python
Python pandas.DataFrame调整列顺序及修改index名的方法
2019/06/21 Python
python之pymysql模块简单应用示例代码
2019/12/16 Python
Python 处理日期时间的Arrow库使用
2020/08/18 Python
python 窃取摄像头照片的实现示例
2021/01/08 Python
美体小铺瑞典官方网站:The Body Shop瑞典
2018/01/27 全球购物
外企C语言笔试题
2013/11/10 面试题
DELPHI中如何调用API,可举例说明
2014/01/16 面试题
考试退步检讨书
2014/01/15 职场文书
多媒体教室标语
2014/06/26 职场文书
党支部三会一课计划
2014/09/24 职场文书
党员作风建设自查报告
2014/10/23 职场文书
四则混合运算教学反思
2016/02/23 职场文书
导游词之平津战役纪念馆
2019/11/04 职场文书
golang elasticsearch Client的使用详解
2021/05/05 Golang
Golang使用Panic与Recover进行错误捕获
2022/03/22 Golang
ipad隐藏软件app图标方法
2022/04/19 数码科技