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下动态显示jqGrid以及jqGrid的属性设置容易出现问题的解决方法
Oct 22 Javascript
关于Mozilla浏览器不支持innerText的解决办法
Jan 01 Javascript
javascript中常用编程知识
Apr 08 Javascript
js处理表格对table进行修饰
May 26 Javascript
JavaScript利用正则表达式去除日期中的-
Jun 09 Javascript
JavaScript使用Max函数返回两个数字中较大数的方法
Apr 06 Javascript
Ubuntu系统下Angularjs开发环境安装
Sep 01 Javascript
JavaScript之cookie技术详解
Nov 18 Javascript
基于vue2.0+vuex+localStorage开发的本地记事本示例
Feb 28 Javascript
微信小程序--组件(swiper)详细介绍
Jun 13 Javascript
分享vue.js devtools遇到一系列问题
Oct 24 Javascript
layui--select使用以及下拉框实现键盘选择的例子
Sep 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缩放图片(根据宽高的等比例缩放)实例介绍
2013/06/09 PHP
Thinkphp中import的几个用法详细介绍
2014/07/02 PHP
PHP+swoole实现简单多人在线聊天群发
2016/01/19 PHP
PHP数组中头部和尾部添加元素的方法(array_unshift,array_push)
2017/04/10 PHP
jQuery lazyLoad图片延迟加载插件的优化改造方法分享
2013/08/13 Javascript
利用浏览器全屏api实现js全屏
2014/01/16 Javascript
返回上一页并自动刷新的JavaScript代码
2014/02/19 Javascript
js 金额格式化来回转换示例
2014/02/23 Javascript
extjs_02_grid显示本地数据、显示跨域数据
2014/06/23 Javascript
Express作者TJ告别Node.js奔向Go
2014/07/14 Javascript
js实现的四级左侧网站分类菜单实例
2015/05/06 Javascript
js中跨域方法原理详解
2015/07/19 Javascript
JS判断iframe是否加载完成的方法
2016/08/03 Javascript
Nodejs高扩展性的模板引擎 functmpl简介
2017/02/13 NodeJs
jQuery中用on绑定事件时需注意的事项
2017/03/19 Javascript
web前端vue filter 过滤器
2018/01/12 Javascript
NodeJS父进程与子进程资源共享原理与实现方法
2018/03/16 NodeJs
实例讲解vue源码架构
2019/01/24 Javascript
js实现json数组分组合并操作示例
2019/02/12 Javascript
vue将后台数据时间戳转换成日期格式
2019/07/31 Javascript
vue封装swiper代码实例解析
2019/10/08 Javascript
简单介绍Python中的readline()方法的使用
2015/05/24 Python
python中的常量和变量代码详解
2018/07/25 Python
Python + Requests + Unittest接口自动化测试实例分析
2019/12/12 Python
Python单元测试模块doctest的具体使用
2020/02/10 Python
Python tkinter布局与按钮间距设置方式
2020/03/04 Python
Html5 localStorage入门教程
2018/04/26 HTML / CSS
工作个人的自我评价
2014/01/14 职场文书
公司前台辞职报告
2014/01/19 职场文书
社区文化建设方案
2014/05/02 职场文书
机关作风整顿个人整改措施2014
2014/09/17 职场文书
公司行政助理岗位职责
2015/04/11 职场文书
魂断蓝桥观后感
2015/06/10 职场文书
结婚喜宴迎宾词
2015/08/10 职场文书
2019数学教师下学期工作总结
2019/06/27 职场文书
Python关于OS文件目录处理的实例分享
2021/05/23 Python