解决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 相关文章推荐
载入进度条 效果
Jul 08 Javascript
音乐播放用的的几个函数
Sep 07 Javascript
jQuery参数列表集合
Apr 06 Javascript
JavaScript实现存储HTML字符串示例
Apr 21 Javascript
js如何判断用户是否是用微信浏览器
Jun 05 Javascript
Bootstrap每天必学之下拉菜单
Nov 25 Javascript
如何使用Vuex+Vue.js构建单页应用
Oct 27 Javascript
微信小程序 wx:for的使用实例详解
Apr 27 Javascript
js实现搜索栏效果
Nov 16 Javascript
如何用JavaScript实现功能齐全的单链表详解
Feb 11 Javascript
vue实现登录页面的验证码以及验证过程解析(面向新手)
Aug 02 Javascript
JS实现拖拽元素时与另一元素碰撞检测
Aug 27 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学习笔记之数组篇
2011/06/28 PHP
PHP和Mysql中转UTF8编码问题汇总
2015/10/10 PHP
Laravel接收前端ajax传来的数据的实例代码
2017/07/20 PHP
PHP生成随机数的方法总结
2018/03/01 PHP
javascript实现的基于金山词霸网络翻译的代码
2010/01/15 Javascript
基于jquery ajax 用户无刷新登录方法详解
2012/04/28 Javascript
一个基于jQuery的树型插件(OrangeTree)使用介绍
2012/05/03 Javascript
node.js中的fs.lchown方法使用说明
2014/12/16 Javascript
详解Wondows下Node.js使用MongoDB的环境配置
2016/03/01 Javascript
基于jQuery日历插件制作日历
2016/03/11 Javascript
node.js中 stream使用教程
2016/08/28 Javascript
利用Vue.js指令实现全选功能
2016/09/08 Javascript
实例详解display:none与visible:hidden的区别
2017/03/30 Javascript
利用node实现一个批量重命名文件的函数
2017/12/21 Javascript
vue如何通过id从列表页跳转到对应的详情页
2018/05/01 Javascript
学习使用ExpressJS 4.0中的新Router的用法
2018/11/06 Javascript
实现elementUI表单的全局验证的方法步骤
2019/04/29 Javascript
vue如何使用外部特殊字体的操作
2020/07/30 Javascript
python处理csv数据动态显示曲线实例代码
2018/01/23 Python
python代码过长的换行方法
2018/07/19 Python
python3.4控制用户输入与输出的方法
2018/10/17 Python
python 使用值来排序一个字典的方法
2018/11/16 Python
python开发准备工作之配置虚拟环境(非常重要)
2019/02/11 Python
使用python绘制二元函数图像的实例
2019/02/12 Python
Pycharm 2020.1 版配置优化的详细教程
2020/08/07 Python
python批量检查两个对应的txt文件的行数是否一致的实例代码
2020/10/31 Python
python实现学生信息管理系统源码
2021/02/22 Python
好的演讲稿开场白
2013/12/30 职场文书
大学生秋游活动方案
2014/02/17 职场文书
海南召开党的群众路线教育实践活动总结大会新闻稿
2014/10/21 职场文书
依法行政工作汇报材料
2014/10/28 职场文书
2015年幼儿园班主任个人工作总结
2015/10/22 职场文书
python实现求纯色彩图像的边框
2021/04/08 Python
教你使用TensorFlow2识别验证码
2021/06/11 Python
Python实现PIL图像处理库绘制国际象棋棋盘
2021/07/16 Python
Tomcat 与 maven 的安装与使用教程
2022/06/16 Servers