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 学习笔记(四)
Dec 31 Javascript
扩展Jquery插件处理mouseover时内部有子元素时发生样式闪烁
Dec 08 Javascript
计算新浪Weibo消息长度(还可以输入119字)
Jul 02 Javascript
JavaScript数组深拷贝和浅拷贝的两种方法
Apr 16 Javascript
JavaScript中的console.assert()函数介绍
Dec 29 Javascript
jQuery定义插件的方法
Dec 18 Javascript
基于JS代码实现图片在页面中旋转效果
Jun 16 Javascript
浅析vue component 组件使用
Mar 06 Javascript
Node.js v8.0.0正式发布!看看带来了哪些主要新特性
Jun 02 Javascript
jsonp跨域获取数据的基础教程
Jul 01 Javascript
详解Axios 如何取消已发送的请求
Oct 20 Javascript
微信小程序中如何计算距离某个节日还有多少天
Jul 15 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版快速排序、冒泡排序
2014/04/09 PHP
java解析json方法总结
2019/05/16 PHP
PHP高并发和大流量解决方案整理
2019/12/24 PHP
Web版彷 Visual Studio 2003 颜色选择器
2007/01/09 Javascript
认识延迟时间为0的setTimeout
2008/05/16 Javascript
javaScript 关闭浏览器 (不弹出提示框)
2010/01/31 Javascript
有趣的JavaScript数组长度问题代码说明
2011/01/20 Javascript
js中的referrer返回上一页使用介绍
2013/09/26 Javascript
Jquery 复选框取值兼容FF和IE8(测试有效)
2013/10/29 Javascript
用js来刷新当前页面保留参数的具体实现
2013/12/23 Javascript
jquery $.trim()方法使用介绍
2014/05/21 Javascript
基于jQuery1.9版本如何判断浏览器版本类型
2016/01/12 Javascript
Bootstrap被封装的弹层
2016/07/20 Javascript
分分钟玩转Vue.js组件
2016/10/25 Javascript
javascript中闭包概念与用法深入理解
2016/12/15 Javascript
vue获取DOM元素并设置属性的两种实现方法
2017/09/30 Javascript
js 获取json数组里面数组的长度实例
2017/10/31 Javascript
vue router-link传参以及参数的使用实例
2017/11/10 Javascript
Vue组件实现触底判断
2019/06/26 Javascript
Django Admin 实现外键过滤的方法
2017/09/29 Python
Python实现求数列和的方法示例
2018/01/12 Python
基于scrapy的redis安装和配置方法
2018/06/13 Python
Python实现快速傅里叶变换的方法(FFT)
2018/07/21 Python
Python中那些 Pythonic的写法详解
2019/07/02 Python
python3.6 tkinter实现屏保小程序
2019/07/30 Python
详解pytorch中squeeze()和unsqueeze()函数介绍
2020/09/03 Python
matplotlib 范围选区(SpanSelector)的使用
2021/02/24 Python
西班牙网上书店:Casa del Libro
2016/11/01 全球购物
巴西男士胡须和头发护理产品商店:Beard
2017/11/13 全球购物
全球烹饪课程的领先预订平台:Cookly
2020/01/28 全球购物
应届毕业生应聘自荐信
2013/12/07 职场文书
医科大学毕业生自荐信
2014/02/03 职场文书
评析教师个人的自我评价
2014/02/19 职场文书
公司党的群众路线教育实践活动领导班子对照检查材料
2014/09/25 职场文书
股东合作协议书模板2篇
2019/11/05 职场文书
MySQL的InnoDB存储引擎的数据页结构详解
2022/03/03 MySQL