解决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 offsetX与layerX区别
Mar 12 Javascript
用jquery生成二级菜单的实例代码
Jun 24 Javascript
js判断ie版本号的简单实现代码
Mar 05 Javascript
JavaScript动态修改网页元素内容的方法
Mar 21 Javascript
Vue单页面应用保证F5强刷不清空数据的解决方案
Jan 31 Javascript
微信小程序利用canvas 绘制幸运大转盘功能
Jul 06 Javascript
在vue-cli的组件模板里使用font-awesome的两种方法
Sep 28 Javascript
vue实现压缩图片预览并上传功能(promise封装)
Jan 10 Javascript
Vue实现类似Spring官网图片滑动效果方法
Mar 01 Javascript
javascript实现的字符串转换成数组操作示例
Jun 13 Javascript
js 实现ajax发送步骤过程详解
Jul 25 Javascript
解决vue与node模版引擎的渲染标记{{}}(双花括号)冲突问题
Sep 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
转PHP手册及PHP编程标准
2006/12/17 PHP
PHP去掉从word直接粘贴过来的没有用格式的函数
2012/10/29 PHP
PHP根据传入参数合并多个JS和CSS文件的简单实现
2014/06/13 PHP
购物车实现的几种方式优缺点对比
2018/05/02 PHP
jquery蒙版控件实现代码
2010/12/08 Javascript
JavaScript验证图片类型(扩展名)的函数分享
2014/05/05 Javascript
laypage分页控件使用实例详解
2016/05/19 Javascript
javascript实现标签切换代码示例
2016/05/22 Javascript
Jquery组件easyUi实现表单验证示例
2016/08/23 Javascript
浅析如何利用JavaScript进行语音识别
2016/10/27 Javascript
jQuery按需加载轮播图(web前端性能优化)
2017/02/17 Javascript
ThinkPHP+jquery实现“加载更多”功能代码
2017/03/11 Javascript
js实现文字列表无缝滚动效果
2017/06/23 Javascript
JS开发中基本数据类型具体有哪几种
2017/10/19 Javascript
react-native fetch的具体使用方法
2017/11/01 Javascript
element-ui多文件上传的实现示例
2019/04/10 Javascript
JS实现音乐导航特效
2020/01/06 Javascript
electron+vue实现div contenteditable截图功能
2020/01/07 Javascript
JS函数参数的传递与同名参数实例分析
2020/03/16 Javascript
如何阻止移动端浏览器点击图片浏览
2020/08/29 Javascript
Nuxt.js nuxt-link与router-link的区别说明
2020/11/06 Javascript
python的random模块及加权随机算法的python实现方法
2017/01/04 Python
python验证码识别教程之滑动验证码
2018/06/04 Python
scrapy-redis源码分析之发送POST请求详解
2019/05/15 Python
Django单元测试工具test client使用详解
2019/08/02 Python
Django如何批量创建Model
2020/09/01 Python
新奇的小玩意:IWOOT
2016/07/21 全球购物
如何用Lucene索引数据库
2016/02/23 面试题
大学生标准推荐信范文
2013/11/25 职场文书
公司活动总结怎么写
2014/06/25 职场文书
应届大学生求职信
2014/07/20 职场文书
焦裕禄精神心得体会
2014/09/02 职场文书
孝老爱亲事迹材料
2014/12/24 职场文书
2015年收银工作总结范文
2015/04/01 职场文书
2015国庆节放假通知范文
2015/07/30 职场文书
MySQL 数据类型选择原则
2021/05/27 MySQL