解决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 相关文章推荐
清华大学出版的事半功倍系列 javascript全部源代码
May 04 Javascript
围观tangram js库
Dec 28 Javascript
JS和Jquery获取和修改label的值的示例代码
Jan 15 Javascript
Javascript实现代码折叠功能
Aug 25 Javascript
AngularJS $injector 依赖注入详解
Sep 14 Javascript
Vue resource中的GET与POST请求的实例代码
Jul 21 Javascript
微信小程序实现发红包功能
Jul 11 Javascript
详解async/await 异步应用的常用场景
May 13 Javascript
vue 实现路由跳转时更改页面title
Nov 05 Javascript
BootstrapValidator验证用户名已存在(ajax)
Nov 08 Javascript
一篇文章带你使用Typescript封装一个Vue组件(简单易懂)
Jun 05 Javascript
Rust中的Struct使用示例详解
Aug 14 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实现登陆验证码(类似条行码状)
2006/10/09 PHP
php单件模式结合命令链模式使用说明
2008/09/07 PHP
php 网上商城促销设计实例代码
2012/02/17 PHP
PHP版 汉字转码的实现详解
2013/06/09 PHP
php使用标签替换的方式生成静态页面
2015/05/21 PHP
超级24小时弹窗代码 24小时退出弹窗代码 100%弹窗代码(IE only)
2010/06/11 Javascript
理解Javascript_02_理解undefined和null
2010/10/11 Javascript
不用锚点也可以平滑滚动到页面的指定位置实现代码
2013/05/08 Javascript
js左右弹性滚动对联广告代码分享
2014/02/19 Javascript
javascript实现checkBox的全选,反选与赋值
2015/03/12 Javascript
js完美实现@提到好友特效(兼容各大浏览器)
2015/03/16 Javascript
JS基于VML技术实现的五角星礼花效果代码
2015/10/26 Javascript
JavaScript之cookie技术详解
2016/11/18 Javascript
Angular使用过滤器uppercase/lowercase实现字母大小写转换功能示例
2018/03/27 Javascript
详解mpvue开发小程序小总结
2018/07/25 Javascript
jQuery滑动效果实现方法分析
2018/09/05 jQuery
详解适配器在JavaScript中的体现
2018/09/28 Javascript
[45:38]DOTA2上海特级锦标赛主赛事日 - 1 胜者组第一轮#1Liquid VS Alliance第一局
2016/03/02 DOTA
[48:31]DOTA2-DPC中国联赛 正赛 Dynasty vs XG BO3 第一场 2月2日
2021/03/11 DOTA
使用 Python 获取 Linux 系统信息的代码
2014/07/13 Python
Python运维自动化之nginx配置文件对比操作示例
2018/08/29 Python
Python中使用__new__实现单例模式并解析
2019/06/25 Python
Django之模板层的实现代码
2019/09/09 Python
比驿:全球酒店比价网
2018/06/20 全球购物
高中军训感言600字
2014/03/11 职场文书
促销活动计划书
2014/05/02 职场文书
支部组织生活会方案
2014/06/10 职场文书
婚礼证婚人演讲稿
2014/09/13 职场文书
丧事答谢词
2015/01/05 职场文书
优秀教师个人总结
2015/02/11 职场文书
吧主申请感言怎么写
2015/08/03 职场文书
Pandas||过滤缺失数据||pd.dropna()函数的用法说明
2021/05/14 Python
解决numpy和torch数据类型转化的问题
2021/05/23 Python
SQL实现LeetCode(197.上升温度)
2021/08/07 MySQL
CSS三大特性继承性、层叠性和优先级详解
2022/01/18 HTML / CSS
《Estab Life》4月6日播出 正式PV、主视觉图公开
2022/03/20 日漫