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 学习 - 提高篇
Feb 02 Javascript
优化javascript的执行速度
Jan 23 Javascript
用javascript作一个通用向导说明
Aug 30 Javascript
javascript通过class来获取元素实现代码
Feb 20 Javascript
自制的文件上传JS控件可支持IE、chrome、firefox etc
Apr 18 Javascript
利用javascript实现全部删或清空所选的操作
May 27 Javascript
实例详解jQuery表单验证插件validate
Jan 18 Javascript
分享JavaScript监听全部Ajax请求事件的方法
Aug 28 Javascript
jQuery实现使用sort方法对json数据排序的方法
Apr 17 jQuery
JavaScript中引用vs复制示例详析
Dec 06 Javascript
超详细小程序定位地图模块全系列开发教学
Nov 24 Javascript
js实现简单的轮播图效果
Dec 13 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 mysql数据库操作类
2008/06/04 PHP
PHP OPCode缓存 APC详细介绍
2010/10/12 PHP
使用迭代器 遍历文件信息的详解
2013/06/08 PHP
smarty中js的调用方法示例
2014/10/27 PHP
jQuery生成asp.net服务器控件的代码
2010/02/04 Javascript
jQuery学习2 选择器的使用说明
2010/02/07 Javascript
在JS中最常看到切最容易迷惑的语法(转)
2010/10/29 Javascript
nullJavascript中创建对象的五种方法实例
2013/05/07 Javascript
jQuery截取指定长度字符串的实现原理及代码
2014/07/01 Javascript
关闭页面时window.location事件未执行的原因分析及解决方案
2014/09/01 Javascript
什么是 AngularJS?AngularJS简介
2014/12/06 Javascript
jQuery中:hidden选择器用法实例
2014/12/30 Javascript
javascript中replace( )方法的使用
2015/04/24 Javascript
javascript实现tab切换的四种方法
2015/11/05 Javascript
jQuery事件绑定用法详解
2016/09/08 Javascript
解析NodeJs的调试方法
2016/12/11 NodeJs
如何用js判断dom是否有存在某class的值
2017/02/13 Javascript
Jquery EasyUI $.Parser
2017/06/02 jQuery
详解在vue-cli项目中安装node-sass
2017/06/21 Javascript
使用node.js对音视频文件加密的实例代码
2017/08/30 Javascript
vue中v-for循环给标签属性赋值的方法
2018/10/18 Javascript
vue element动态渲染、移除表单并添加验证的实现
2019/01/16 Javascript
numpy的文件存储.npy .npz 文件详解
2018/07/09 Python
Python常见数据结构之栈与队列用法示例
2019/01/14 Python
python实现爬虫抓取小说功能示例【抓取金庸小说】
2019/08/09 Python
tensorflow -gpu安装方法(不用自己装cuda,cdnn)
2020/01/20 Python
Python+Kepler.gl实现时间轮播地图过程解析
2020/07/20 Python
美国婴儿用品店:Babies”R”Us
2017/10/12 全球购物
求职简历中自我评价
2014/01/28 职场文书
白莲教口号
2014/06/18 职场文书
安全演讲稿开场白
2014/08/25 职场文书
五星级酒店前台接待岗位职责
2015/04/02 职场文书
公司管理建议书
2015/09/14 职场文书
MySQL创建索引需要了解的
2021/04/08 MySQL
适合后台管理系统开发的12个前端框架(小结)
2021/06/29 Javascript
详解Redis在SpringBoot工程中的综合应用
2021/10/16 Redis