Vue keep-alive实践总结(推荐)


Posted in Javascript onAugust 31, 2017

<keep-alive>是Vue的内置组件,能在组件切换过程中将状态保留在内存中,防止重复渲染DOM。

<keep-alive> 包裹动态组件时,会缓存不活动的组件实例,而不是销毁它们。和 <transition> 相似,<keep-alive> 是一个抽象组件:它自身不会渲染一个 DOM 元素,也不会出现在父组件链中。

prop:

  • include: 字符串或正则表达式。只有匹配的组件会被缓存。
  • exclude: 字符串或正则表达式。任何匹配的组件都不会被缓存。

在2.1.0版本Vue中

常见用法:

// 组件
export default {
 name: 'test-keep-alive',
 data () {
 return {
  includedComponents: "test-keep-alive"
 }
 }
}
<keep-alive include="test-keep-alive">
 <!-- 将缓存name为test-keep-alive的组件 -->
 <component></component>
</keep-alive>

<keep-alive include="a,b">
 <!-- 将缓存name为a或者b的组件,结合动态组件使用 -->
 <component :is="view"></component>
</keep-alive>

<!-- 使用正则表达式,需使用v-bind -->
<keep-alive :include="/a|b/">
 <component :is="view"></component>
</keep-alive>

<!-- 动态判断 -->
<keep-alive :include="includedComponents">
 <router-view></router-view>
</keep-alive>

<keep-alive exclude="test-keep-alive">
 <!-- 将不缓存name为test-keep-alive的组件 -->
 <component></component>
</keep-alive>

结合router,缓存部分页面

使用$route.meta的keepAlive属性:

<keep-alive>
 <router-view v-if="$route.meta.keepAlive"></router-view>
</keep-alive>
<router-view v-if="!$route.meta.keepAlive"></router-view>

需要在router中设置router的元信息meta:

//...router.js
export default new Router({
 routes: [
 {
  path: '/',
  name: 'Hello',
  component: Hello,
  meta: {
  keepAlive: false // 不需要缓存
  }
 },
 {
  path: '/page1',
  name: 'Page1',
  component: Page1,
  meta: {
  keepAlive: true // 需要被缓存
  }
 }
 ]
})

使用效果

以上面router的代码为例:

<!-- Page1页面 -->
<template>
 <div class="hello">
 <h1>Vue</h1>
 <h2>{{msg}}</h2>
 <input placeholder="输入框"></input>
 </div>
</template>

<!-- Hello页面 -->
<template>
 <div class="hello">
 <h1>{{msg}}</h1>
 </div>
</template>

(1) 在Page1页面输入框输入“asd”,然后手动跳转到Hello页面;

(2) 回到Page1页面发现之前输入的"asd"依然保留,说明页面信息成功保存在内存中;

Vue keep-alive实践总结(推荐)

​ 图1 进入Page1页面,并输入"asd"

Vue keep-alive实践总结(推荐)

​ 图2 跳转到Hello

Vue keep-alive实践总结(推荐)

​ 图3 返回Page1页面,输入框数据会被保留

当然,也可以通过动态设置route.meta的keepAlive属性来实现其他需求,

借鉴一下vue-router 之 keep-alive这篇博客中的例子:

  • 首页是A页面
  • B页面跳转到A,A页面需要缓存
  • C页面跳转到A,A页面不需要被缓存

思路是在每个路由的beforeRouteLeave(to, from, next)钩子中设置to.meta.keepAlive

A的路由:

{
 path: '/',
 name: 'A',
 component: A,
 meta: {
  keepAlive: true // 需要被缓存
 }
}
export default {
 data() {
  return {};
 },
 methods: {},
 beforeRouteLeave(to, from, next) {
   // 设置下一个路由的 meta
  to.meta.keepAlive = true; // B 跳转到 A 时,让 A 缓存,即不刷新
  next();
 }
};
export default {
 data() {
  return {};
 },
 methods: {},
 beforeRouteLeave(to, from, next) {
  // 设置下一个路由的 meta
  to.meta.keepAlive = false; // C 跳转到 A 时让 A 不缓存,即刷新
  next();
 }
};

亲测有效哦~

keep-alive生命周期钩子函数:activated、deactivated

使用<keep-alive>会将数据保留在内存中,如果要在每次进入页面的时候获取最新的数据,需要在activated阶段获取数据,承担原来created钩子中获取数据的任务。

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

Javascript 相关文章推荐
javascript 点击整页变灰的效果(可做退出效果)。
Jan 09 Javascript
js去字符串前后空格5种实现方法及比较
Apr 03 Javascript
Javascript 遍历页面text控件详解
Jan 06 Javascript
jquery中ajax使用error调试错误的方法
Feb 08 Javascript
jQuery实现DIV层淡入淡出拖动特效的方法
Feb 13 Javascript
angular实现form验证实例代码
Jan 17 Javascript
简单实现js拖拽效果
Jul 25 Javascript
jQuery实现仿京东防抖动菜单效果示例
Jul 06 jQuery
webstrom Debug 调试vue项目的方法步骤
Jul 17 Javascript
Three.js实现3D机房效果
Dec 30 Javascript
重学 JS:为啥 await 不能用在 forEach 中详解
Apr 15 Javascript
vue 清空input标签 中file的值操作
Jul 21 Javascript
深入理解vue-router之keep-alive
Aug 31 #Javascript
vue-router 导航钩子的具体使用方法
Aug 31 #Javascript
浅谈express 中间件机制及实现原理
Aug 31 #Javascript
JavaScript 通过Ajax 动态加载CheckBox复选框
Aug 31 #Javascript
BootStrap下的弹出框加载select2框架失败的解决方法
Aug 31 #Javascript
Angular2 http jsonp的实例详解
Aug 31 #Javascript
BootStrap中Table隐藏后显示问题的实现代码
Aug 31 #Javascript
You might like
PHP编程中八种常见的文件操作方式
2006/11/19 PHP
php5 non-thread-safe和thread-safe这两个版本的区别分析
2010/03/13 PHP
smarty实现多级分类的方法
2014/12/05 PHP
百度工程师讲PHP函数的实现原理及性能分析(二)
2015/05/13 PHP
PHP仿微信多图片预览上传实例代码
2016/09/13 PHP
php微信公众号js-sdk开发应用
2016/11/28 PHP
PHP+redis实现微博的推模型案例分析
2019/07/10 PHP
浅谈laravel框架sql中groupBy之后排序的问题
2019/10/17 PHP
js 面向对象的技术创建高级 Web 应用程序
2010/02/25 Javascript
js URL参数的拼接方法比较
2012/02/15 Javascript
JavaScript将Table导出到Excel实现思路及代码
2013/03/13 Javascript
js+css实现增加表单可用性之提示文字
2013/06/03 Javascript
js读写cookie实现一个底部广告浮层效果的两种方法
2013/12/29 Javascript
含有CKEditor的表单如何提交
2014/01/09 Javascript
按下回车键指向下一个位置的一个函数代码
2014/03/10 Javascript
浅谈JS原型对象和原型链
2016/03/02 Javascript
JavaScript中创建对象的模式汇总
2016/04/19 Javascript
浅谈JavaScript 数据属性和访问器属性
2016/09/01 Javascript
jquery注册文本框获取焦点清空,失去焦点赋值的简单实例
2016/09/08 Javascript
JQuery控制DIV的选取实现方法
2016/09/18 Javascript
JavaScript实现的拼图算法分析
2019/02/13 Javascript
vue中的使用token的方法示例
2020/03/10 Javascript
python3中dict(字典)的使用方法示例
2017/03/22 Python
浅谈pandas用groupby后对层级索引levels的处理方法
2018/11/06 Python
Python计算库numpy进行方差/标准方差/样本标准方差/协方差的计算
2018/12/28 Python
Django REST framework视图的用法
2019/01/16 Python
Python一行代码解决矩阵旋转的问题
2019/11/30 Python
PyTorch 普通卷积和空洞卷积实例
2020/01/07 Python
Python通过4种方式实现进程数据通信
2020/03/12 Python
CSS3弹性盒模型开发笔记(一)
2016/04/26 HTML / CSS
Smallable意大利家庭概念店:设计师童装及家居装饰
2018/01/08 全球购物
Champion澳大利亚官网:美国冠军运动服装
2018/05/07 全球购物
超市创业计划书
2014/04/24 职场文书
党支部换届选举方案
2014/05/08 职场文书
python 利用PyAutoGUI快速构建自动化操作脚本
2021/05/31 Python
python异步的ASGI与Fast Api实现
2021/07/16 Python