解决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 相关文章推荐
XML的代替者----JSON
Jul 21 Javascript
Javascript表达式中连续的 &amp;&amp; 和 || 之赋值区别
Oct 17 Javascript
基于jQuery实现左右div自适应高度完全相同的代码
Aug 09 Javascript
JS定时刷新页面及跳转页面的方法
Jul 04 Javascript
JS对象转换为Jquery对象实现代码
Dec 29 Javascript
jQuery使用prepend()方法在元素前添加内容用法实例
Mar 26 Javascript
基于jQuery实现的向下滑动二级菜单效果代码
Aug 31 Javascript
基于Bootstrap的UI扩展 StyleBootstrap
Jun 17 Javascript
html、css和jquery相结合实现简单的进度条效果实例代码
Oct 24 Javascript
ionic App问题总结系列之ionic点击系统返回键退出App
Aug 19 Javascript
jQuery时间戳和日期相互转换操作示例
Dec 07 jQuery
利用d3.js力导布局绘制资源拓扑图实例教程
Jan 08 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生成Flash动画的实现代码
2010/03/12 PHP
PHP中的正则表达式函数介绍
2012/02/27 PHP
PHP引用(&amp;)各种使用方法实例详解
2014/03/20 PHP
Yii入门教程之目录结构、入口文件及路由设置
2014/11/25 PHP
php输出xml属性的方法
2015/03/19 PHP
PHP记录和读取JSON格式日志文件
2016/07/07 PHP
laravel中短信发送验证码的实现方法
2018/04/25 PHP
PHP+Ajax简单get验证操作示例
2019/03/02 PHP
浅谈laravel-admin form中的数据,在提交后,保存前,获取并进行编辑
2019/10/21 PHP
js传值 判断
2006/10/26 Javascript
如何在标题栏显示框架内页面的标题
2007/02/03 Javascript
JavaScript使用function定义对象并调用的方法
2015/03/23 Javascript
Bootstrap打造一个左侧折叠菜单的系统模板(一)
2016/05/17 Javascript
elementUI Vue 单个按钮显示和隐藏的变换功能(两种方法)
2018/09/04 Javascript
详解vue 项目白屏解决方案
2018/10/31 Javascript
vue基础之data存储数据及v-for循环用法示例
2019/03/08 Javascript
JavaScript中的一些实用小技巧总结
2019/04/07 Javascript
JavaScript交换变量的常用方法小结【4种方法】
2020/05/07 Javascript
ES2020 已定稿,真实场景案例分析
2020/05/25 Javascript
Python3访问并下载网页内容的方法
2015/07/28 Python
Python用threading实现多线程详解
2017/02/03 Python
Python下载网络小说实例代码
2018/02/03 Python
使用实现XlsxWriter创建Excel文件并编辑
2018/05/04 Python
Python 输出时去掉列表元组外面的方括号与圆括号的方法
2018/12/24 Python
Python线程池模块ThreadPoolExecutor用法分析
2018/12/28 Python
Python PyQt5整理介绍
2020/04/01 Python
html5 Canvas画图教程(6)—canvas里画曲线之arcTo方法
2013/01/09 HTML / CSS
javascript实现用户必须勾选协议实例讲解
2021/03/24 Javascript
工商管理本科毕业生求职信范文
2013/10/05 职场文书
公安局班子个人对照检查材料思想汇报
2014/10/09 职场文书
个人租房协议书
2014/11/28 职场文书
先进党支部申报材料
2014/12/24 职场文书
大学生社区义工服务心得体会
2016/01/22 职场文书
python 实现mysql自动增删分区的方法
2021/04/01 Python
matplotlib之pyplot模块实现添加子图subplot的使用
2021/04/25 Python
SQL Server表分区删除详情
2021/10/16 SQL Server