详解关于Vue2.0路由开启keep-alive时需要注意的地方


Posted in Javascript onSeptember 18, 2018

Vue2.0 做应用必有的需求就是页面数据需要做缓存,不用每次进入页面都要把数据重新请求一遍,每次页面切换都有段等待数据相应时间,这个用户体验可想有多么蛋疼,所以页面缓存是必要的,啥时候需要更新页面数据呢?可以监听状态变化,或者是手动下拉刷新重新请求数据,酱紫,我想用户体验会做的更好。

keep-alive的作用以及好处

在做电商有关的项目中,当我们第一次进入列表页需要请求一下数据,当我从列表页进入详情页,详情页不缓存也需要请求下数据,然后返回列表页,这时候我们使用keep-alive来缓存组件,防止二次渲染,这样会大大的节省性能。

废话不多说直接上码,一般是在 src/App.vue 设置开启 keep-alive 实现页面数据缓存:

<template>
 <keep-alive>
  <router-view></router-view>
 </keep-alive>
</template>

列举几个常用的 hook 方法,如下:

export default {
 data() {
  return {
  
  }
 },
 created: function() {
  console.log("the hook of created is done!");
 },
 mounted: function() {
  console.log("the hook of mounted is done!");
 },
 activated: function() {
  console.log("the hook of activated is done!");
 },
 deactivated: function() {
  console.log("the hook of deactivated is done!");
 }
}

首次进来 hook 的触发顺序 created-> mounted-> activated,退出时触发 deactivated:

// 控制台打印结果
the hook of created is done!
the hook of mounted is done!
the hook of activated is done!
the hook of deactivated is done!

二次进来 hook 只触发 activated,退出时触发 deactivated:

// 控制台打印结果
the hook of activated is done!
the hook of deactivated is done!

所以这就是为什么有些人开启 keep-alive 之后,created 和 mounted 注册的 pageInt 方法不触发的原因了,因为 keep-alive 把它们屏蔽了,也就是把数据缓存起来,所以不再请求。

如果你的某些页面一定要实时请求,你可以直接在 activated 这个 hook 做 pageInt,就不要在 created 和 mounted 上面注册 pageInt 方法了。

还有你可以选择性 pageInt,比如监听状态变化,包括但不限于监听路由的变化,某参数的变化,某时间节点的变化等等。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JavaScript中各种编码解码函数的区别和注意事项
Aug 19 Javascript
jquery实现邮箱自动填充提示功能
Nov 17 Javascript
基于javascript实现浏览器滚动条快到底部时自动加载数据
Nov 30 Javascript
深入理解angularjs过滤器
May 25 Javascript
每日十条JavaScript经验技巧(二)
Jun 23 Javascript
基于bootstrap-datetimepicker.js不支持IE8的快速解决方法
Nov 07 Javascript
JS文件上传神器bootstrap fileinput详解
Jan 28 Javascript
vue.js删除动态绑定的radio的指定项
Jun 02 Javascript
node.js中fs文件系统目录操作与文件信息操作
Feb 24 Javascript
使用webpack4编译并压缩ES6代码的方法示例
Apr 24 Javascript
vue2.0项目集成Cesium的实现方法
Jul 30 Javascript
原生JS实现弹幕效果的简单操作指南
Nov 10 Javascript
Vue中 key keep-alive的实现原理
Sep 18 #Javascript
vue服务端渲染页面缓存和组件缓存的实例详解
Sep 18 #Javascript
从Vuex中取出数组赋值给新的数组,新数组push时报错的解决方法
Sep 18 #Javascript
vue服务端渲染添加缓存的方法
Sep 18 #Javascript
在Vuex使用dispatch和commit来调用mutations的区别详解
Sep 18 #Javascript
微信小程序开发之路由切换页面重定向问题
Sep 18 #Javascript
在小程序中使用canvas的方法示例
Sep 17 #Javascript
You might like
Win2003服务器安全加固设置--进一步提高服务器安全性
2007/05/23 PHP
PHP实现多条件查询实例代码
2010/07/17 PHP
PHP ob缓存以及ob函数原理实例解析
2020/11/13 PHP
关于使用runtimeStyle属性问题讨论文章
2007/03/08 Javascript
新老版本juqery获取radio对象的方法
2010/03/01 Javascript
IE图片缓存document.execCommand(&quot;BackgroundImageCache&quot;,false,true)
2011/03/01 Javascript
使用Js让Html中特殊字符不被转义
2013/11/05 Javascript
JavaScript实现计算字符串中出现次数最多的字符和出现的次数
2015/03/12 Javascript
jQuery使用$.ajax进行即时验证的方法
2015/12/08 Javascript
理解javascript正则表达式
2016/03/08 Javascript
Google Maps基础及实例解析
2016/08/06 Javascript
JS继承之借用构造函数继承和组合继承
2016/09/07 Javascript
详解Node.Js如何处理post数据
2016/09/19 Javascript
jQuery实现扑克正反面翻牌效果
2017/03/10 Javascript
JavaScript队列的应用实例详解【经典数据结构】
2017/04/12 Javascript
原生JS 购物车及购物页面的cookie使用方法
2017/08/21 Javascript
jQuery动态移除与增加onclick属性的方法详解
2018/06/07 jQuery
vue实现一个炫酷的日历组件
2018/10/08 Javascript
微信小程序之裁剪图片成圆形的实现代码
2018/10/11 Javascript
react项目如何使用iconfont的方法步骤
2019/03/13 Javascript
javascript防抖函数debounce详解
2019/06/11 Javascript
安装多版本Vue-CLI的实现方法
2020/03/24 Javascript
js 解析 JSON 数据简单示例
2020/04/21 Javascript
js实现石头剪刀布游戏
2020/10/11 Javascript
跟老齐学Python之坑爹的字符编码
2014/09/28 Python
关于python之字典的嵌套,递归调用方法
2019/01/21 Python
Python Opencv实现图像轮廓识别功能
2020/03/23 Python
CSS3感应鼠标的背景闪烁和图片缩放动画效果
2014/05/14 HTML / CSS
使用css如何制作时间ICON方法实践
2012/11/12 HTML / CSS
优纳科技软件测试面试题
2012/05/15 面试题
司机辞职报告范文
2014/01/20 职场文书
《梅兰芳学艺》教学反思
2014/02/24 职场文书
教师职位说明书
2014/07/29 职场文书
欠条样本
2015/07/03 职场文书
应届生们该怎么书写求职信?
2019/07/05 职场文书
Springboot-cli 开发脚手架,权限认证,附demo演示
2022/04/28 Java/Android