解决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实现的动态文字变换
Jul 28 Javascript
如何让页面加载完成后执行js
Jun 26 Javascript
Jquery 类网页微信二维码图块滚动效果具体实现
Oct 14 Javascript
动态创建script在IE中缓存js文件时导致编码的解决方法
May 04 Javascript
jquery实现仿新浪微博评论滚动效果
Aug 06 Javascript
浅析JS运动
Dec 28 Javascript
详解jQuery插件开发方式
Nov 22 Javascript
javascript 操作cookies详解及实例
Feb 22 Javascript
浅析node Async异步处理模块用例分析及常用方法介绍
Nov 17 Javascript
Vue项目webpack打包部署到Tomcat刷新报404错误问题的解决方案
May 15 Javascript
layui将table转化表单显示的方法(即table.render转为表单展示)
Sep 24 Javascript
如何让vue长列表快速加载
Mar 29 Vue.js
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第一次无法获取cookie问题处理
2014/12/15 PHP
我整理的PHP 7.0主要新特性
2016/01/07 PHP
WordPress中重置文章循环的rewind_posts()函数讲解
2016/01/11 PHP
PHP从二维数组得到N层分类树的实现代码
2016/10/11 PHP
PHP实现验证码校验功能
2017/11/16 PHP
一些主流JS框架中DOMReady事件的实现小结
2011/02/12 Javascript
JS图片根据鼠标滚动延时加载的实例代码
2013/07/13 Javascript
js获取当前日期前七天的方法
2015/02/28 Javascript
浅谈JavaScript事件的属性列表
2015/03/01 Javascript
js操作数组函数实例小结
2015/12/10 Javascript
jQuery实现的分子运动小球碰撞效果
2016/01/27 Javascript
Jquery为DIV添加click事件的简单实例
2016/06/02 Javascript
详解bootstrap用dropdown-menu实现上下文菜单
2017/09/22 Javascript
vue.js 打包时出现空白页和路径错误问题及解决方法
2019/06/26 Javascript
Vue 中 filter 与 computed 的区别与用法解析
2019/11/21 Javascript
Vue js with语句原理及用法解析
2020/09/03 Javascript
Python利用pyHook实现监听用户鼠标与键盘事件
2014/08/21 Python
Python中最常用的操作列表的几种方法归纳
2015/04/24 Python
关于numpy中np.nonzero()函数用法的详解
2017/02/07 Python
python+matplotlib实现鼠标移动三角形高亮及索引显示
2018/01/15 Python
python实现学生信息管理系统
2020/04/05 Python
python 画二维、三维点之间的线段实现方法
2019/07/07 Python
python3.6中@property装饰器的使用方法示例
2019/08/17 Python
Python数据库小程序源代码
2019/09/15 Python
解决c++调用python中文乱码问题
2020/07/29 Python
BabyBjörn婴儿背带法国官网:BabyBjorn法国
2018/06/16 全球购物
Currentbody澳大利亚:美容仪专家
2019/11/11 全球购物
TCP/IP的分层模型
2013/10/27 面试题
产假请假条
2014/04/10 职场文书
投资合作协议书范本
2014/04/17 职场文书
活动倡议书范文
2014/05/13 职场文书
门面房租房协议书
2014/08/20 职场文书
离婚协议书怎样才有法律效力
2014/10/10 职场文书
redis三种高可用方式部署的实现
2021/05/11 Redis
适合后台管理系统开发的12个前端框架(小结)
2021/06/29 Javascript