解决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 getElementsByClassName函数
Apr 01 Javascript
JavaScript实用技巧(一)
Aug 16 Javascript
JS保存、读取、换行、转Json报错处理方法
Jun 14 Javascript
JS常用表单验证方法总结
May 22 Javascript
jquery的总体架构分析及实现示例详解
Nov 08 Javascript
Javascript实现的Map集合工具类完整实例
Jul 31 Javascript
node.js微信公众平台开发教程
Mar 04 Javascript
搞定immutable.js详细说明
May 02 Javascript
Extjs 点击复选框在表格中增加相关信息行
Jul 12 Javascript
windows下vue-cli及webpack搭建安装环境
Apr 25 Javascript
JavaScript之事件委托实例(附原生js和jQuery代码)
Jul 22 jQuery
js replace 全局替换的操作方法
Jun 12 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实现微信公众平台账号自定义菜单类
2015/10/11 PHP
thinkPHP自定义类实现方法详解
2016/11/30 PHP
PHP的mysqli_thread_id()函数讲解
2019/01/24 PHP
laravel admin实现分类树/模型树的示例代码
2020/06/10 PHP
PHP dirname功能及原理实例解析
2020/10/28 PHP
js 对象是否存在判断
2009/07/15 Javascript
JQuery跨Iframe选择实现代码
2010/08/19 Javascript
$.format,jquery.format 使用说明
2011/07/13 Javascript
利用javascript打开模态对话框(示例代码)
2014/01/11 Javascript
一个JavaScript防止表单重复提交的实例
2014/10/21 Javascript
JS提交form表单实例分析
2015/12/10 Javascript
AngularJs表单验证实例代码解析
2016/11/29 Javascript
Vue学习笔记之表单输入控件绑定
2017/09/05 Javascript
layui数据表格实现重载数据表格功能(搜索功能)
2019/07/27 Javascript
微信小程序使用Vant Weapp组件库的方法步骤
2019/08/01 Javascript
微信小程序去除左上角返回键的实现方法
2020/03/06 Javascript
vue单文件组件无法获取$refs的问题
2020/06/24 Javascript
python向已存在的excel中新增表,不覆盖原数据的实例
2018/05/02 Python
PyTorch的深度学习入门教程之构建神经网络
2019/06/27 Python
Python在Matplotlib图中显示中文字体的操作方法
2019/07/29 Python
关于torch.optim的灵活使用详解(包括重写SGD,加上L1正则)
2020/02/20 Python
opencv之颜色过滤只留下图片中的红色区域操作
2020/06/05 Python
Merrell美国官网:美国登山运动鞋品牌
2018/02/07 全球购物
提高EJB性能都有哪些技巧
2012/03/25 面试题
MYSQL基础面试题
2012/05/13 面试题
实习自我鉴定模板
2013/09/28 职场文书
金属材料工程毕业生个人的自我评价
2013/11/28 职场文书
土木工程专业个人求职信
2013/12/05 职场文书
春节活动策划方案
2014/01/24 职场文书
劳资协议书范本
2014/04/23 职场文书
小学生学雷锋演讲稿
2014/04/25 职场文书
财务情况说明书范文
2014/05/06 职场文书
低碳环保标语
2014/06/12 职场文书
学生安全责任书模板
2014/07/25 职场文书
个人年终总结范文
2015/03/09 职场文书
Go各时间字符串使用解析
2021/04/02 Golang