keep-Alive搭配vue-router实现缓存页面效果的示例代码


Posted in Javascript onJune 24, 2020

Vue工程中有些页面需要有缓存。这个功能通过keep-alive组件实现,keep-alive组件可以使被包含的组件保留状态,或避免重新渲染。

在routes.js中定义路由,在路由中定义元信息(meta字段),需要缓存的页面就需要在meta对象中定义一个字段,这里设置为keepAlive,设置为true,反之,则不缓存。

{
  path: '/a',
  component: () => import('@/pages/A'),
  meta: {
   title:'A',
   keepAlive: true
  }
},
{
  path: '/b',
  component: () => import('@/pages/B'),
  meta: {
   title:'B',
   keepAlive: true
  }
},
{
  path: '/c',
  component: () => import('@/pages/C'),
  meta: {
   title:'C',
   keepAlive: true
  }
}

然后修改App.vue页面

<template>
 <div id="app">
  <!-- <router-view v-if="isRouterAlive"></router-view> -->
  <keep-alive>
   <router-view v-if="$route.meta.keepAlive"></router-view>
  </keep-alive>
  <router-view v-if="!$route.meta.keepAlive"></router-view>
 </div>
</template>

这样就可以实现有目的的对页面进行缓存了。

但如果这时要实现从A页面进入B页面后,让A页面不缓存的话我们还需要搭配上路由钩子函数beforeRouteLeave()。

在A页面中这样写:

beforeRouteLeave(to, from, next) {
    // 设置下一个路由的 meta
    if(to.meta.title=="B"){
      from.meta.keepAlive = false; // 让B不缓存,即刷新
    }
    next();
}

用到keep-Alive,遇到的最多的一个问题就是怎么去掉这种缓存状态。就比如用户每一次进行新流程的操作的时候,这个时候页面还是缓存是不对的。

就比如,一个用户登录之后在某个缓存的页面上填了信息,如果这个用户注销了之后,按道理,这些信息是应该消失的,即恢复初始状态,但是这个时候不关闭页面标签(因为新开标签的话会使所有页面重新渲染),用户再次登录回去,还会发现之前的页面还是存在缓存的,即这个页面没有重新渲染。如果想要解决这个问题的话,就要提到activated和deactivated这两个特殊的生存周期函数了。但是需要注意的是,activated和deactivated这两个生存周期函数只存在于keep-Alive组件中。当一个keep-Alive组件缓存生效的时候,它不会触发平常我们熟悉的created()和mounted()这类生存周期函数,因此不会被重新渲染,所以,它的状态得以保留。但是我们可以通过这两个生存周期函数来更新页面。

先设置一个全局的标志符,类型为布尔值,代表是否为缓存状态,你可以把它存进vuex或者sessionStorage。(以下为存入sessionStorage为例)

在用户登录成功的时候设置为sessionStorage.setItem("keepAlive",false);然后在缓存页面中添加如下代码:

activated:function(){
    if(sessionStorage.getItem("keepAlive")=='false'){
      //进行初始化
    }else{
      //to do
    }
},

总结

到此这篇关于keep-Alive搭配vue-router实现缓存页面效果的示例代码的文章就介绍到这了,更多相关vue router实现缓存页面内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
jQuery的学习步骤
Feb 23 Javascript
JS弹出窗口代码大全(详细整理)
Dec 21 Javascript
JavaScript 里的类数组对象
Apr 08 Javascript
javasript实现密码的隐藏与显示
May 08 Javascript
JavaScript SweetAlert插件实现超酷消息警告框
Jan 28 Javascript
JS实现颜色动态淡化效果
Mar 06 Javascript
利用jquery正则表达式在页面验证url网址输入是否正确
Apr 04 jQuery
Jquery获取radio选中的值
May 05 jQuery
js时间戳与日期格式之间相互转换
Dec 11 Javascript
Koa 中的错误处理解析
Apr 09 Javascript
vue基于v-charts封装双向条形图的实现代码
Dec 09 Javascript
浅谈js中的attributes和Attribute的用法与区别
Jul 16 Javascript
javascript实现前端成语点击验证
Jun 24 #Javascript
vue单文件组件无法获取$refs的问题
Jun 24 #Javascript
JS实现数据动态渲染的竖向步骤条
Jun 24 #Javascript
javascript实现评分功能
Jun 24 #Javascript
javascript实现移动端红包雨页面
Jun 23 #Javascript
JS实现canvas简单小画板功能
Jun 23 #Javascript
javascript+Canvas实现画板功能
Jun 23 #Javascript
You might like
php批量删除数据
2007/01/18 PHP
php实现在站点里面添加邮件发送的功能
2020/04/28 PHP
PHP排序二叉树基本功能实现方法示例
2018/05/26 PHP
addEventListener和attachEvent二者绑定的执行函数中的this不相同
2012/12/09 Javascript
ExtJS DOM元素操作经验分享
2013/08/28 Javascript
javascript实现base64 md5 sha1 密码加密
2015/09/09 Javascript
AngularJS基础 ng-href 指令用法
2016/08/01 Javascript
js实现键盘自动打字效果
2016/12/23 Javascript
ES6概念 Symbol.keyFor()方法
2016/12/25 Javascript
Three.js实现浏览器变动时进行自适应的方法
2017/09/26 Javascript
js 公式编辑器 - 自定义匹配规则 - 带提示下拉框 - 动态获取光标像素坐标
2018/01/04 Javascript
微信小程序异步API为Promise简化异步编程的操作方法
2018/08/14 Javascript
详解vue-cli3多页应用改造
2019/06/04 Javascript
纯异步nodejs文件夹(目录)复制功能
2019/09/03 NodeJs
vue实现树形结构样式和功能的实例代码
2019/10/15 Javascript
javascript实现贪吃蛇小游戏
2020/07/28 Javascript
[05:31]DOTA2英雄梦之声_第08期_莉娜
2014/06/23 DOTA
[59:35]DOTA2-DPC中国联赛定级赛 Aster vs DLG BO3第一场 1月8日
2021/03/11 DOTA
Python中实现对Timestamp和Datetime及UTC时间之间的转换
2015/04/08 Python
python爬虫入门教程--正则表达式完全指南(五)
2017/05/25 Python
python实现稀疏矩阵示例代码
2017/06/09 Python
Python的numpy库中将矩阵转换为列表等函数的方法
2018/04/04 Python
python实现四人制扑克牌游戏
2020/04/22 Python
记一次django内存异常排查及解决方法
2020/08/07 Python
HTML5添加鼠标悬浮音响效果不使用FLASH
2014/04/23 HTML / CSS
土耳其国际性时尚购物网站:Modanisa
2018/01/19 全球购物
运动会广播稿150字
2014/02/19 职场文书
基层党组织公开承诺书
2014/03/28 职场文书
财务担保书范文
2014/04/02 职场文书
吨的认识教学反思
2014/04/27 职场文书
市级文明单位申报材料
2014/05/07 职场文书
新兵入伍心得体会
2014/09/04 职场文书
2014年语文教研组工作总结
2014/12/06 职场文书
产品质量保证书范本
2015/02/27 职场文书
2016秋季运动会前导词
2015/11/25 职场文书
2016年社区中秋节活动总结
2016/04/05 职场文书