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 相关文章推荐
工作中常用到的JS表单验证代码(包括例子)
Nov 11 Javascript
Javascript的并行运算实现代码
Nov 19 Javascript
一个简单的弹性返回顶部JS代码实现介绍
Jun 09 Javascript
返回上一页并自动刷新的JavaScript代码
Feb 19 Javascript
jQuery validate验证插件使用详解
May 11 Javascript
jQuery多级联动下拉插件chained用法示例
Aug 20 Javascript
基于jquery实现的鼠标悬停提示案例
Dec 11 Javascript
jQuery实现一个简单的轮播图
Feb 19 Javascript
jQuery实现所有验证通过方可提交的表单验证
Nov 21 jQuery
vue实现验证码输入框组件
Dec 14 Javascript
JS获取浏览器地址栏的多个参数值的任意值实例代码
Jul 24 Javascript
js实现掷骰子小游戏
Oct 24 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 selectradio和checkbox默认选择的实现方法详解
2013/06/29 PHP
PHP实现15位身份证号转18位的方法分析
2019/10/16 PHP
javascript 闭包疑问
2010/12/30 Javascript
查看大图功能代码jquery版
2013/11/05 Javascript
使用jquery实现IE下按backspace相当于返回操作
2014/03/18 Javascript
使用JS取得焦点(focus)元素代码
2014/03/22 Javascript
JS动态插入并立即执行回调函数的方法
2016/04/21 Javascript
教你一步步用jQyery实现轮播器
2016/12/18 Javascript
vue父子组件的嵌套的示例代码
2017/09/08 Javascript
vue中axios处理http发送请求的示例(Post和get)
2017/10/13 Javascript
安装vue-cli报错 -4058 的解决方法
2017/10/19 Javascript
vue实现树形菜单效果
2018/03/19 Javascript
[03:48]大碗DOTA
2019/07/25 DOTA
使用python调用浏览器并打开一个网址的例子
2014/06/05 Python
Python文档生成工具pydoc使用介绍
2015/06/02 Python
Python使用combinations实现排列组合的方法
2018/11/13 Python
python同时遍历数组的索引和值的实例
2018/11/15 Python
PyCharm永久激活方式(推荐)
2020/09/22 Python
在python中list作函数形参,防止被实参修改的实现方法
2020/06/05 Python
使用sklearn对多分类的每个类别进行指标评价操作
2020/06/11 Python
在 Windows 下搭建高效的 django 开发环境的详细教程
2020/07/27 Python
Python爬虫使用bs4方法实现数据解析
2020/08/25 Python
HTML5通过navigator.mediaDevices.getUserMedia调用手机摄像头问题
2020/04/27 HTML / CSS
关于HTML5+ API plusready的兼容问题
2020/11/20 HTML / CSS
英国时尚泳装品牌:Maru Swimwear
2019/10/06 全球购物
GWT都有什么特性
2016/12/02 面试题
请说出这段代码执行后a和b的值分别是多少
2015/03/28 面试题
物业管理专业个人的自我评价
2013/11/19 职场文书
酒店门卫岗位职责
2013/12/29 职场文书
社区服务标语
2014/07/01 职场文书
优秀党员申报材料
2014/12/18 职场文书
旅游项目合作意向书
2015/05/08 职场文书
教师工作证明范本
2015/06/12 职场文书
如何才能写好调研报告?
2019/07/03 职场文书
web前端之css水平居中代码解析
2021/05/20 HTML / CSS
MySQL开启事务的方式
2021/06/26 MySQL