什么是keep-alive?

在平常开发中,有部分组件没有必要多次初始化,这时,我们需要将组件进行持久化,使组件的状态维持不变,在下一次展示时,也不会进行重新初始化组件。
也就是说,kee-alive 是 Vue 内置的一个组件,可以使被包含的组件保留状态,或避免重新渲染 。也就是所谓的组件缓存

使用场景

举个例子:移动端H5项目,订单列表页面,有分页,当我们滑动的时候,就会加载相应的数据,当我们前往了订单详情页面,再从订单详情返回订单列表,这时产品需要让我们前端的小伙伴做到在返回后,需要保持上次加载的数据以及滑动的位置,这个时候就会有聪明的同学说keep-alive,没错,就是它,很棒的。。。

常用知识点


注意:被keep-alive包含的组件不会被再次初始化,也就意味着缓存的组件不会再次被mounted,为此提供activated和deactivated两个生命周期的钩子。

  • activated 当 keep-alive 包含的组件再次渲染的时候触发
  • deactivated 当 keep-alive 包含的组件销毁的时候触发

属性理解

  1. include包含的组件(可以为字符串,数组,以及正则表达式,只有匹配的组件会被缓存)
  2. exclude排除的组件(以为字符串,数组,以及正则表达式,任何匹配的组件都不会被缓存)
  3. max缓存组件的最大值(类型为字符或者数字,可以控制缓存组件的个数)

注:

  1. 当使用正则表达式或者数组时,一定要使用v-bind
  2. 如果同时使用include,exclude,那么exclude优先于include
代码示例:
// 所有路径匹配到的视图组件都会被缓存!
<keep-alive><router-view></router-view>
</keep-alive>// 只缓存组件name为aa或者bb的组件
<keep-alive include="aa,bb"> <component />
</keep-alive>// 组件name为cc的组件不缓存
<keep-alive exclude="cc"> <component />
</keep-alive>// 如果同时使用include,exclude,那么exclude优先于include, 下面的例子只缓存aa组件
<keep-alive include="aa,bb" exclude="bb"> <component />
</keep-alive>// 如果缓存的组件超过了max设定的值3,那么将删除第一个缓存的组件
<keep-alive exclude="c" max="3"> <component />
</keep-alive>

结合router使用

使用 meta 属性
// routes 配置
export default [{path: '/',name: 'home',component: Home,meta: {keepAlive: true // 需要被缓存}},{path: '/aa',name: 'aa',component: Aa,meta: {keepAlive: false // 不需要被缓存}},{path: '/bb',name: 'bb',component: Bb,//不写meta即不需要被缓存}
]
<keep-alive><router-view v-if="$route.meta.keepAlive"><!-- 这里是会被缓存的视图组件,比如 Home! --></router-view>
</keep-alive><router-view v-if="!$route.meta.keepAlive"><!-- 这里是不会被缓存的视图组件,比如 Aa,Bb! -->
</router-view>

注意的坑点

1.keep-alive 先匹配被包含组件的 name 字段,如果 name 不可用,则匹配当前组件 components 配置中的注册名称。
2.keep-alive 不会在函数式组件中正常工作,因为它们没有缓存实例。
3.当匹配条件同时在 includeexclude 存在时,以 exclude 优先级最高(当前vue 2.4.2 version)。比如:包含于排除同时匹配到了组件Bb,那组件Bb不会被缓存。
4.包含在 keep-alive 中,但符合 exclude ,不会调用activateddeactivated

Vue中keep-alive用法相关推荐

  1. vue中directives的用法

    Vue中directives的用法 关于 vue 中 directives 的用法问题,详细可以参考vue官方对directives的解释 当前文章主要讲述directives怎么用,directiv ...

  2. vue中定时器一般用法,定时器函数传参以及清除定时器

    一.vue中定时器一般用法(举个例子) 显示当前时间, setInterval()方法会每秒执行一次函数,类似手表功能: <template><div class="use ...

  3. vue中watch的用法

    在vue中,使用watch来响应数据的变化.watch的用法大致有三种.下面代码是watch的一种简单的用法: <input type="text" v-model=&quo ...

  4. vue中this.init用法_Vue中的this.$options.data()和this.$data用法说明

    问题 项目里遇到一个问题,用this.$options.data()重置组件data时,data()里用this获取的props或method都为undefined,代码简化如下: export de ...

  5. vue中props的用法

    vue使用props的用法 日常编程中都会用到父组件用子组件.子用父的情况,下面先介绍一种子传父的情况 1.在父组件中 (1).首先是在其定义一个list属性以存储其数据值 (2).定义一个绑定属性& ...

  6. vue中@oninput的用法

    .vue文件其实是一个组件,今天这篇文章要讲的是.vue文件中监听input的输入值变化事件.需求是这页面中,改变input的值,就调用一个事件,第一想到的是oninput. oninput 事件在用 ...

  7. vue中$root的用法

    vue中$root是用来访问根组件的,用法: this.$root.根组件属性 代码: main.js: new Vue({data(){return{isUpdate:true //根组件属性}}, ...

  8. vue 中provide的用法_聊聊Vue中provide/inject的应用详解

    众所周知,在组件式开发中,最大的痛点就在于组件之间的通信.在 Vue 中,Vue 提供了各种各样的组件通信方式,从基础的 props/$emit 到用于兄弟组件通信的 EventBus,再到用于全局数 ...

  9. Vue中 $ref 的用法

    ref 被用来给DOM元素或子组件注册引用信息.引用信息会根据父组件的 $refs 对象进行注册.如果在普通的DOM元素上使用,引用信息就是元素; 如果用在子组件上,引用信息就是组件实例 注意:只要想 ...

  10. vue中$bus的用法及$emit、$on、$off的使用

    vue中 $bus 一般与 $emit. $on. $off 连用,一般用在任意组件间的通信,即 $bus 用来传递非父子关系的数据. 如两个组件之间传递数据: 子组件1 this.$bus.$emi ...

最新文章

  1. 高防服务器租用:DDoS保护关键主题与防御保护性质
  2. cutterman 导出html,电脑中如何使用cutterman插件
  3. Windbg新手入坑指南
  4. POJ 计算几何专项训练(1) 【2318】【2398】【3304】【2653】【1556】【1066】...
  5. 微软 Visual Studio 2019 16.5 发布:.NET 移动开发、生产力
  6. oracle的集合操作符,[Oracle] Oracle的集合操作符
  7. 原版英文书籍《Linux命令行》阅读记录7 | 一些键盘按键技巧
  8. 何为MQ以及为何要用MQ
  9. 峰哥建议你要多「旷课」
  10. 【笔记】underfined和null
  11. 调查计算机对运算能力的影响,计算器对计算能力的影响
  12. java 根据经纬度坐标查询出来附近店铺
  13. Proxy是代理,Reflect是干嘛用的?
  14. ORACLE的保留小数或整数函数
  15. Qt编写项目作品26-一维码二维码解析及生成
  16. wps右边的标记区域怎么去掉,wpsword右边的标记区域怎么去掉
  17. 构建神经网络模型方法,神经网络建立数学模型
  18. 红海市场杀出的细分蓝海,车队管理改变商用车命运的「核武器」
  19. 浅谈LCA的几种算法
  20. 计算广告系列(一)-基本概念整理!

热门文章

  1. navicat 表合并查询_navicat怎么合并表格
  2. 天蝎项目整机柜服务器解决方案,天蝎整机柜服务器标准符合性测试已启动
  3. linux mkdir命令用法,常用Linux运维命令 - mkdir命令用法详解
  4. Cisco wlc change the time
  5. 零基础入门 Vue3 | 附高清原图
  6. 16、git删除暂存区文件
  7. 啊哈算法之水管工游戏
  8. Java面试自我介绍篇
  9. 今天就给大家介绍一个抢购茅台的小技巧,不需要安装Python,不需要配置环境,就和你在电脑上安装使用QQ等软件一样
  10. HP工作站如何在BIOS下开启、关闭安全芯片