解决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初学:find()方法及children方法的区别分析
Jan 31 Javascript
jquery获取自定义属性(attr和prop)实例介绍
Apr 21 Javascript
GridView中获取被点击行中的DropDownList和TextBox中的值
Jul 18 Javascript
JavaScript验证电子邮箱的函数
Aug 22 Javascript
对比分析json及XML
Nov 28 Javascript
9款2014最热门jQuery实用特效推荐
Dec 07 Javascript
javascript的函数劫持浅析
Sep 26 Javascript
有关文件上传 非ajax提交 得到后台数据问题
Oct 12 Javascript
JavaScript 字符串数字左补位,右补位,取固定长度,截位扩展函数代码
Mar 25 Javascript
d3.js实现立体柱图的方法详解
Apr 28 Javascript
Chart.js 轻量级HTML5图表绘制工具库(知识整理)
May 22 Javascript
vue-router命名路由和编程式路由传参讲解
Jan 19 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输出表格的实现代码(修正版)
2010/12/29 PHP
PHP获取当前url的具体方法全面解析
2013/11/26 PHP
DEDECMS首页调用图片集里的多张图片
2015/06/05 PHP
php获取远程文件的内容和大小
2015/11/03 PHP
win7安装php框架Yii的方法
2016/01/25 PHP
php生成HTML文件的类方法
2019/10/11 PHP
js 浮动层菜单收藏
2009/01/16 Javascript
jquery 滚动条事件简单实例
2013/07/12 Javascript
javascript强大的日期函数代码分享
2013/09/04 Javascript
编程语言JavaScript简介
2014/10/16 Javascript
JS实现点击按钮后框架内载入不同网页的方法
2015/05/05 Javascript
Angular表单验证实例详解
2016/10/20 Javascript
js 开发之autocomplete=&quot;off&quot;在chrom中失效的解决办法
2017/09/28 Javascript
使用koa2创建web项目的方法步骤
2019/03/12 Javascript
vue+egg+jwt实现登录验证的示例代码
2019/05/18 Javascript
js定义类的方法示例【ES5与ES6】
2019/07/30 Javascript
Vue CLI项目 axios模块前后端交互的使用(类似ajax提交)
2019/09/01 Javascript
Vue v-for循环之@click点击事件获取元素示例
2019/11/09 Javascript
python脚本监控docker容器
2016/04/27 Python
Python替换NumPy数组中大于某个值的所有元素实例
2020/06/08 Python
零基础小白多久能学会python
2020/06/22 Python
python 爬取腾讯视频评论的实现步骤
2021/02/18 Python
CSS3 倾斜的网页图片库实例教程
2009/11/14 HTML / CSS
html5小技巧之通过document.head获取head元素
2014/06/04 HTML / CSS
Halston Heritage官网:简洁的日装,稍显奢华的晚装
2018/11/20 全球购物
美国家居装饰和豪华家具购物网站:One Kings Lane
2018/12/24 全球购物
新加坡交友网站:be2新加坡
2019/04/10 全球购物
年度考核自我鉴定
2013/11/09 职场文书
装修施工安全责任书
2014/07/24 职场文书
2014年班干部工作总结
2014/11/25 职场文书
退休教师欢送会致辞
2015/07/31 职场文书
2019朋友新婚祝福语精选
2019/10/10 职场文书
python实现网络五子棋
2021/04/11 Python
python小程序之飘落的银杏
2021/04/17 Python
python保存大型 .mat 数据文件报错超出 IO 限制的操作
2021/05/10 Python
Hive日期格式转换方法总结
2022/06/25 数据库