解决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 相关文章推荐
js正则表达式中test,exec,match方法的区别说明
Jan 29 Javascript
基于javascript的COOkie的操作实现只能点一次
Dec 26 Javascript
jQuery实现菜单感应鼠标滑动动画效果的方法
Feb 28 Javascript
使用JavaScript解决网页图片拉伸问题(推荐)
Nov 25 Javascript
AngularJS基于ngInfiniteScroll实现下拉滚动加载的方法
Dec 14 Javascript
使用BootStrap建立响应式网页——通栏轮播图(carousel)
Dec 21 Javascript
jQuery实现的背景颜色渐变动画效果示例
Mar 24 jQuery
MUI 解决动态列表页图片懒加载再次加载不成功的bug问题
Apr 13 Javascript
react-native 封装选择弹出框示例(试用ios&amp;android)
Jul 11 Javascript
微信小程序开发之路由切换页面重定向问题
Sep 18 Javascript
vue 子组件修改data或调用操作
Aug 07 Javascript
Vue实现多页签组件
Jan 14 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解压tar.gz格式文件的方法
2016/02/14 PHP
php+mysql+ajax 局部刷新点赞/取消点赞功能(每个账号只点赞一次)
2020/07/24 PHP
jQuery实现鼠标滑过遮罩并高亮显示效果
2013/07/16 Javascript
JavaScript获取XML数据附示例截图
2014/03/05 Javascript
JQuery弹出层示例可自定义
2014/05/19 Javascript
跟我学习javascript的隐式强制转换
2015/11/16 Javascript
详谈javascript精度问题与调整
2017/07/08 Javascript
微信小程序如何获取openid及用户信息
2018/01/26 Javascript
vue-cli2.x项目优化之引入本地静态库文件的方法
2018/06/19 Javascript
微信小程序列表中item左滑删除功能
2018/11/07 Javascript
在Vue中实现随hash改变响应菜单高亮
2020/03/09 Javascript
[04:20]DOTA2-DPC中国联赛 正赛 VG vs LBZS 选手采访 1月19日
2021/03/11 DOTA
简单的编程0基础下Python入门指引
2015/04/01 Python
python 链接和操作 memcache方法
2017/03/04 Python
使用Python的turtle模块画图的方法
2017/11/15 Python
python模仿网页版微信发送消息功能
2018/02/24 Python
遗传算法python版
2018/03/19 Python
详解Python给照片换底色(蓝底换红底)
2019/03/22 Python
把django中admin后台界面的英文修改为中文显示的方法
2019/07/26 Python
python利用tkinter实现屏保
2019/07/30 Python
关于PyTorch 自动求导机制详解
2019/08/18 Python
Python爬取破解无线网络wifi密码过程解析
2019/09/17 Python
Pandas时间序列:重采样及频率转换方式
2019/12/26 Python
python使用PIL剪切和拼接图片
2020/03/23 Python
Python的Django框架实现数据库查询(不返回QuerySet的方法)
2020/05/19 Python
Python while true实现爬虫定时任务
2020/06/08 Python
trivago美国:全球最大的酒店价格比较网站
2018/01/18 全球购物
抽象类和接口的区别
2012/09/19 面试题
计算机应用职专应届生求职信
2013/11/12 职场文书
工地门卫岗位职责
2013/12/30 职场文书
培训主管的职业生涯规划
2014/03/06 职场文书
2016年优秀少先队辅导员事迹材料
2016/02/26 职场文书
Python中快速掌握Data Frame的常用操作
2021/03/31 Python
Pytorch 中net.train 和 net.eval的使用说明
2021/05/22 Python
windows安装 redis 6.2.6最新步骤详解
2022/04/26 Redis