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 相关文章推荐
Extjs列表详细信息窗口新建后自动加载解决方法
Apr 02 Javascript
javascript (用setTimeout而非setInterval)
Dec 28 Javascript
JS实现倒计时(天数、时、分、秒)
Nov 16 Javascript
canvas实现十二星座星空图
Feb 14 Javascript
Js自动截取字符串长度,添加省略号(……)的实现方法
Mar 06 Javascript
详解Vue的computed(计算属性)使用实例之TodoList
Aug 07 Javascript
Vue导出json数据到Excel电子表格的示例
Dec 04 Javascript
解决vue无法设置滚动位置的问题
Oct 07 Javascript
20道JS原理题助你面试一臂之力(必看)
Jul 22 Javascript
解决vue打包后刷新页面报错:Unexpected token
Aug 27 Javascript
LayUI数据接口返回实体封装的例子
Sep 12 Javascript
vue+echarts实现中国地图流动效果(步骤详解)
Jan 27 Vue.js
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实现处理输入转义字符的代码
2015/11/08 PHP
在 Laravel 项目中使用 webpack-encore的方法
2019/07/21 PHP
document.documentElement的一些使用技巧
2013/04/18 Javascript
javascript:文字不间断向左移动的实例代码
2013/08/08 Javascript
jQuery移除元素自动解绑事件实现思路及代码
2014/05/31 Javascript
使用JS+plupload直接批量上传图片到又拍云
2014/12/01 Javascript
jQuery实现高亮显示的方法
2015/03/10 Javascript
JavaScript函数内部属性和函数方法实例详解
2016/03/17 Javascript
基于BootStrap Metronic开发框架经验小结【三】下拉列表Select2插件的使用
2016/05/12 Javascript
Js实现中国公民身份证号码有效性验证实例代码
2017/05/03 Javascript
在vue项目中使用md5加密的方法
2018/09/14 Javascript
Element ui 下拉多选时新增一个选择所有的选项
2019/08/21 Javascript
layer弹出层倒计时关闭的实现方法
2019/09/27 Javascript
基于vue3.0.1beta搭建仿京东的电商H5项目
2020/05/06 Javascript
原生js实现表格翻页和跳转
2020/09/29 Javascript
解决vue-cli输入命令vue ui没效果的问题
2020/11/17 Javascript
JS实现纸牌发牌动画
2021/01/19 Javascript
python实现文本文件合并
2015/12/29 Python
python爬虫实现教程转换成 PDF 电子书
2017/02/19 Python
Python 专题二 条件语句和循环语句的基础知识
2017/03/19 Python
使用Python的toolz库开始函数式编程的方法
2018/11/15 Python
python3 map函数和filter函数详解
2019/08/26 Python
Pytorch Tensor基本数学运算详解
2019/12/30 Python
使用Python来做一个屏幕录制工具的操作代码
2020/01/18 Python
Python实现区域填充的示例代码
2021/02/03 Python
使用CSS3的::selection改变选中文本颜色的方法
2015/09/29 HTML / CSS
JavaScript获取当前url根目录(路径)
2014/02/19 面试题
专业求职信撰写要诀
2014/02/18 职场文书
我爱我家教学反思
2014/05/01 职场文书
技术比武方案
2014/05/19 职场文书
教师竞聘上岗演讲稿
2014/09/03 职场文书
工商行政处罚决定书
2015/06/24 职场文书
交通事故责任认定书
2015/08/06 职场文书
Python干货实战之八音符酱小游戏全过程详解
2021/10/24 Python
SQL Server2019数据库备份与还原脚本,数据库可批量备份
2021/11/20 SQL Server
铁头也玩根德 YachtBoy YB-230......
2022/04/05 无线电