Vue 内置组件keep

keep-alive 是Vue内置的组件之一, 主要用于保存组件状态或制止从头渲染。

浸染

   在组件切换进程中将状态保存在内存中,防备反复渲染DOM,淘汰加载时间及机能耗损,提高用户体验。

一、keep-alive 用法

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

当组件在 < keep-alive> 内被切换,它的 activated 和 deactivated 这两个生命周期钩子函数将会被对应执行。

Props:

include - 字符串或正则表达式。只有名称匹配的组件会被缓存。
  exclude - 字符串或正则表达式。任何名称匹配的组件都不会被缓存。
  max - 数字。最多可以缓存几多组件实例。

include & exclude

假如你只想缓存部门组件的状态,可以利用include属性。

假如你想除去一些组件,其他的才被缓存,可以利用exlucde属性。

max

最多可以缓存几多组件实例。一旦这个数字到达了,在新实例被建设之前,已缓存组件中最久没有被会见的实例会被销毁掉。

<keep-alive :max="10"> <component :is="view"></component> </keep-alive>

利用示例:
1.缓存所有页面:

<keep-alive> <router-view></router-view> <!--这里是会被缓存的组件--> </keep-alive>

2.按照条件缓存部门页面

()

<template> <div> // 1. 将缓存 name 为 newsList 可能 productList 的组件 <keep-alive include='newsList,productList'> <router-view/> </keep-alive> // 2. 将不缓存 name 为 test 的组件 <keep-alive exclude='test'> <router-view/> </keep-alive> </div> </template> <script> export default { name: 'App' } </script>

留意:

尚有一步,你必需在需要被缓存状态的组件的script部门,给组件添加一个name属性。 假如没有利用keep-alive缓存状态的组件,可以不写name属性。可是假如利用了keep-alive缓存该组件状态,则此组件必需有这个属性。而且,这个属性的值,还必需跟标签中include属性的值完全一致,包罗巨细写。 以productList.vue组件为例 

<template> <!-- 这里是productList组件的html布局部门 --> </template> <script> export default { name: "productList", //假如利用了keep-alive缓存该组件状态,则此组件必需有这个属性。 data(){ return {} } </script>

3.团结vue-router,缓存部门页面

export default new Router({ mode: 'history', routes: [ { path: 'https://www.jb51.net/', name: 'home', component: Home, children: [ { path: 'products', name: 'products', component: products, meta: { keepAlive: true // 需要缓存 } }, { path: 'newsDetails', name: 'newsDetails', component: newsDetails, meta: { keepAlive: false // 不需要缓存 } } ] } ] })

在 App.vue 内里

<template> <div> <keep-alive> <router-view v-if="$route.meta.keepAlive"></router-view> </keep-alive> <router-view v-if="!$route.meta.keepAlive"></router-view> </div> </template> <script> export default { name: 'App' } </script>

二、keep-alive 生命周期

包括在 keep-alive 中建设的组件,会多出两个生命周期的钩子: activated 与 deactivated。

1. activated

      在 keep-alive 组件激活时挪用。

在组件第一次渲染时会被挪用,之后在每次缓存组件被激活时挪用。

第一次进入缓存路由/组件,在mounted后头,beforeRouteEnter捍卫传给 next 的回调函数之前挪用:

页面第一次进入的时候,钩子触发的顺序是created->mounted->activated

因为组件被缓存了,再次进入缓存路由/组件时,不会触发这些钩子:

beforeCreate created beforeMount mounted 都不会触发。

2. deactivated

      在 keep-alive 组件停用(分开路由)时挪用。       

利用了keep-alive就不会挪用beforeDestroy(组件销毁前钩子)和destroyed(组件销毁),因为组件没被销毁,被缓存起来了。

这个钩子可以看作beforeDestroy的替代,假如你缓存了组件,要在组件销毁的的时候做一些工作,你可以放在这个钩子里。

  留意:

1、 利用 keep-alive 会将数据保存在内存中,假如要在每次进入页面的时候获取最新的数据,需要在 activated 阶段获取数据,包袱本来created钩子函数中获取数据的任务。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wsjfgf.html