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 相关文章推荐
Javascript 构造函数,公有,私有特权和静态成员定义方法
Nov 30 Javascript
超轻量级的基于jquery的三级展开列表
Apr 26 Javascript
js常用代码段收集
Oct 28 Javascript
初学Jquery插件制作 在SageCRM的查询屏幕隐藏部分行的功能
Dec 26 Javascript
div拖拽插件——JQ.MoveBox.js(自制JQ插件)
May 17 Javascript
JS动态改变表格边框宽度的方法
Mar 31 Javascript
如何开发出更好的JavaScript模块
Dec 22 Javascript
Vue实现商品详情页的评价列表功能
Sep 04 Javascript
vue element upload组件 file-list的动态绑定实现
Oct 11 Javascript
Vue 解决路由过渡动画抖动问题(实例详解)
Jan 05 Javascript
基于JS实现计算24点算法代码实例解析
Jul 23 Javascript
JavaScript实现队列结构过程
Dec 06 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
smarty内部日期函数html_select_date()用法实例分析
2015/07/08 PHP
CodeIgniter常用知识点小结
2016/05/26 PHP
thinkphp3.2.3版本的数据库增删改查实现代码
2016/09/22 PHP
linux平台编译安装PHP7并安装Redis扩展与Swoole扩展实例教程
2016/09/30 PHP
php实现大文件断点续传下载实例代码
2019/10/01 PHP
jQuery实现预加载图片的方法
2015/03/17 Javascript
JS实现随机乱撞彩色圆球特效的方法
2015/05/05 Javascript
JQuery遍历DOM节点的方法
2015/06/11 Javascript
JavaScript html5利用FileReader实现上传功能
2020/03/27 Javascript
vue实现个人信息查看和密码修改功能
2018/05/06 Javascript
解决bootstrap模态框数据缓存的问题方法
2018/08/10 Javascript
浅谈JavaScript面向对象--继承
2019/03/20 Javascript
详解vue后台系统登录态管理
2019/04/02 Javascript
详解vue+axios给开发环境和生产环境配置不同的接口地址
2019/08/16 Javascript
微信小程序以7天为周期连续签到7天功能效果的示例代码
2020/08/20 Javascript
vue-cli中实现响应式布局的方法
2021/03/02 Vue.js
[02:34]DOTA2英雄基础教程 幽鬼
2014/01/02 DOTA
[33:17]OG vs VGJ.T 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
python 不关闭控制台的实现方法
2011/10/23 Python
使用python绘制常用的图表
2016/08/27 Python
python django 实现验证码的功能实例代码
2017/05/18 Python
python中子类调用父类函数的方法示例
2017/08/18 Python
Python模拟随机游走图形效果示例
2018/02/06 Python
python 中如何获取列表的索引
2019/07/02 Python
使用OpenCV实现人脸图像卡通化的示例代码
2021/01/15 Python
10分钟理解CSS3 Grid布局
2018/12/20 HTML / CSS
HTML5 新旧语法标记对我们有什么好处
2012/12/13 HTML / CSS
HTML5 input placeholder 颜色修改示例
2014/05/30 HTML / CSS
卡骆驰德国官方网站:Crocs德国
2019/03/29 全球购物
医院后勤自我鉴定
2013/10/13 职场文书
中学教师请假制度
2014/02/03 职场文书
四风问题个人对照检查材料
2014/09/26 职场文书
企业2014年度工作总结
2014/12/10 职场文书
导游词之南京莫愁湖公园
2019/11/13 职场文书
Python基础之pandas数据合并
2021/04/27 Python
Python中的socket网络模块介绍
2022/07/23 Python