解决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限定复选框的选择个数示例代码
Aug 25 Javascript
使用JS获取当前地理位置方法汇总
Dec 18 Javascript
jQuery自动添加表单项的方法
Jul 13 Javascript
基于jQuery实现搜索关键字自动匹配功能
Mar 26 Javascript
Node.js测试中的Mock文件系统详解
Nov 21 Javascript
Angular 2.x学习教程之结构指令详解
May 25 Javascript
Angular2使用jQuery的方法教程
May 28 jQuery
vue子父组件通信的实现代码
Jul 09 Javascript
Vue学习笔记进阶篇之函数化组件解析
Jul 21 Javascript
使用vue-resource进行数据交互的实例
Sep 02 Javascript
从vue基础开始创建一个简单的增删改查的实例代码(推荐)
Feb 11 Javascript
浅谈Vue.use到底是什么鬼
Jan 21 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/01/05 PHP
php正则preg_replace_callback函数用法实例
2015/06/01 PHP
Centos PHP 扩展Xchche的安装教程
2016/07/09 PHP
PHP笛卡尔积实现原理及代码实例
2020/12/09 PHP
js 字符串操作函数
2009/07/25 Javascript
JavaScript 10件让人费解的事情
2010/02/15 Javascript
jquery获取下拉列表的值为null的解决方法
2011/03/18 Javascript
一个关于javascript匿名函数的问题分析
2012/03/30 Javascript
基于jquery实现一张图片点击鼠标放大再点缩小
2013/09/29 Javascript
JS求平均值的小例子
2013/11/29 Javascript
使用js实现关闭js弹出层的窗口
2014/02/10 Javascript
jQuery实现checkbox全选的方法
2015/06/10 Javascript
基于JS实现回到页面顶部的五种写法(从实现到增强)
2016/09/03 Javascript
vue 将页面公用的头部组件化的方法
2017/12/18 Javascript
JS交互点击WKWebView中的图片实现预览效果
2018/01/05 Javascript
jQuery替换节点元素的操作方法
2018/03/18 jQuery
vuex直接赋值的三种方法总结
2018/09/16 Javascript
React中使用UMEditor的方法示例
2019/12/27 Javascript
[02:22]《新闻直播间》2017年08月14日
2017/08/15 DOTA
Python代码实现删除一个list里面重复元素的方法
2019/04/02 Python
Python Tornado批量上传图片并显示功能
2020/03/26 Python
python3 logging日志封装实例
2020/04/08 Python
sklearn的predict_proba使用说明
2020/06/28 Python
Django中使用Celery的方法步骤
2020/12/07 Python
英国DVD和蓝光碟片购买网站:Zoom.co.uk(电影和电视)
2019/09/23 全球购物
电信专业应届生自荐信
2013/09/28 职场文书
计算机网络毕业生自荐信
2013/10/01 职场文书
土建资料员岗位职责
2014/01/04 职场文书
法学毕业生自我鉴定
2014/01/31 职场文书
党组织公开承诺书
2014/03/29 职场文书
师恩难忘教学反思
2014/04/27 职场文书
观看信仰心得体会
2014/09/04 职场文书
大一学生个人总结
2015/02/15 职场文书
暑期实践个人总结
2015/03/06 职场文书
大学生创业计划书
2019/06/24 职场文书
关于@OnetoMany关系映射的排序问题,使用注解@OrderBy
2021/12/06 Java/Android