保留组件状态,避免重新渲染

缓存不活动的组件实例
,能在组件切换过程中将状态保留在内存中,防止重复渲染DOM。
生命周期 用的是
激活/停用
activated
deactivated
include 字符串或正则表达式,只有名称匹配的组件会被缓存
exclude 字符串或正则表达式,任何名称匹配的组件都不会被缓存
max 数字,最多可以缓存多少组件实例

<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>
<keep-alive :include="/a|b/">
//使用正则表达式,需使用v-bind<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-view使用

<keep-alive><router-view v-if="$route.meta.keepAlive"></router-view>
</keep-alive>
<router-view v-if="!$route.meta.keepAlive"></router-view>
//router.js
export default new Router({routes: [{path: '/',name: 'Hello',component: Hello,meta: {keepAlive: false // 不需要缓存}},{path: '/page1',name: 'Page1',component: Page1,meta: {keepAlive: true // 需要被缓存}}]
})

如何解决keep-alive缓存

第一种

keep-alive生命周期钩子函数:activated、deactivated
activated: 页面第一次进入的时候,钩子触发的顺序是created->mounted->activated
deactivated:  页面退出的时候会触发deactivated,当再次前进或者后退的时候只触发activated使用<keep-alive>会将数据保留在内存中,
如果要在每次进入页面的时候获取最新的数据,
需要在activated阶段获取数据,
承担原来created钩子中获取数据的任务

第二种

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

第三种

每次组件渲染的时候,都会执行beforeRouteEnter
beforeRouteEnter(to, from, next){next(vm=>{console.log(vm)// 每次进入路由执行vm.getData()  // 获取数据})
},

源码层面的理解

源码层面的理解

keep-alive属性及生命周期相关推荐

  1. maven scope 属性和生命周期

    2019独角兽企业重金招聘Python工程师标准>>> maven的dependency参数 scope的分类 1.compile:默认值 他表示被依赖项目需要参与当前项目的编译,还 ...

  2. Vue第四章 过滤器、组件、插槽、props组件属性、生命周期、监听器(内含详细代码解释)

    目录 一.过滤器 二.组件 三.插槽 四.props组件属性 五.生命周期 六.监听器 每日一句 一.过滤器 新的配置项 filters: 用于存放过滤器, 配合 {{ value | 过滤器 }} ...

  3. Vue01 vue基础、mvvm、ES6z知识点、计算属性、生命周期

    Vue案例: <body> <div id="app"><!--第一部分--><fieldset><legend>inf ...

  4. vue实践学习——keep-alive属性及生命周期

    通过上一篇博客,大家已经熟知keep-alive是什么作用的组件以及其简单应用,那么接下来再来进一步的了解一下keep-alive props:官网链接https://cn.vuejs.org/v2/ ...

  5. 你还在问android横竖屏切换的生命周期?

    本文原创,转载请注明来自xiaoQLu http://www.cnblogs.com/xiaoQLu/p/3324503.html 开源帮助android获得了飞速的发展,开源也导致了数不清的碎片问题 ...

  6. ViewController的生命周期分析和使用

    iOS的SDK中提供很多原生ViewController,大大提高了我们的开发效率,下面是我的一些经验. 一.结构 按结构可以对iOS的所有ViewController分成两类: 1.主要用于展示内容 ...

  7. viewController的生命周期

    一.结构 按结构可以对iOS的所有ViewController分成两类: 1.主要用于展示内容的ViewController,这种ViewController主要用于为用户展示内容,并与用户交互,如U ...

  8. ts watch路由 参数变化_TypeScript基础(六):TS 在 Vue 中的用法,data,生命周期,methods,computed,props,watch,$emit...

    其实 ts 在 vue 的环境下,我们经常用的一个东西就是上一篇博客讲的装饰器. 装饰器一般情况下有三种用途: 1,装饰整个类. 2,装饰某一个方法. 3,装饰某一个属性. 而这三种用途对 vue 来 ...

  9. 秒懂SpringBoot之Spring对象生命周期与扩展点浅尝辄止

    [版权申明] 非商业目的注明出处可自由转载 出自:shusheng007 文章目录 概述 Bean的生命周期 感受Bean生命周期 具体说明 扩展点 容器级扩展点 对象级扩展点 多一点 总结 概述 I ...

最新文章

  1. 通过Windows DShow获取设备名、支持的编解码及视频size列表实现
  2. 学校SOLARIS ORACLE很好的电子教材
  3. Android 换肤
  4. iOS 利用JSPatch 添加热补丁功能
  5. 想回家吗?先用腾讯刚上线的这个功能查一查!
  6. 【oracle】复合数据类型
  7. ASP.NET Core 2.2 基础知识(十四) WebAPI Action返回类型(未完待续)
  8. (转)什么时候加上android.intent.category.DEFAULT和LAUNCHER
  9. Dynamips 7200
  10. java 计数程序_Java JVM——4.程序计数器
  11. python中symbol_理解和使用ES6中的Symbol
  12. Js传参中文乱码解决方法
  13. Python LeetCode 数组中的最长山脉
  14. 在iOS7中修改键盘Return键的类型
  15. 安装 window10 系统
  16. java苹果通知V2新版协议实现订阅退款
  17. Druid Monitor监控
  18. [加载XlUE组件失败,迅雷看看桌面图标已损坏,请重新安装。]问题处理
  19. 全球与中国汽车线性稳压器市场运营状况及未来前景展望报告2022-2028年版
  20. 线程同步与相互排斥:相互排斥锁

热门文章

  1. ssh: connect to host ip地址 port 22: Connection refused (deepin适用)
  2. 如何用示波器导出csv数据
  3. ocr 图像倾斜矫正-radon变换
  4. 矩阵论笔记(十)——广义逆矩阵
  5. Go 学习之旅之-- Chanel
  6. 学习HTML5音频录制
  7. 超级好用的录屏软件:FSCapture
  8. 【计网实验——prj9】路由器转发实验
  9. 带你快速了解—业务建模
  10. 【UE5】打开他人的UE4/5项目没有.sln文件,打开c++文件失败