keep-alive
是vue2.0
加入的一个特性, 能缓存某个组件,或者某个路由。缓存的好处:javascript
缓存组件,被keep-alive
只会渲染一次html
<keep-alive> <component> <!-- 组件将被缓存 --> </component> </keep-alive>
缓存路由,全部在keep-alive
标签下的路由都会被缓存 :
<keep-alive>
<router-view></router-view>
</keep-alive>前端
有些时候,咱们只须要缓存部分页面或者某些组件。vue
在路由里面配置:java
const router = [ { name: 'login', path: '/login', component: login, }, { path: '/createResume', name: 'createResume', component: createResume, meta: { isKeepAlive: true } }, { path: '/test', name: 'test', component: test, meta: { isKeepAlive: true } } ]
利用路由元数据配置了一个isKeepAlive
,来判断是否须要缓存该页面,在应用路由的地方须要作以下改动:面试
<keep-alive> <router-view v-if="$route.meta.isKeepAlive"></router-view> </keep-alive>
这样设置,test
和createResume
2 个页面就会被缓存,而其余页面就不会被缓存,在跳转的时候会被销毁。正则表达式
inlcude
包含该组件就缓存,exclude
不包含该组件就缓存,两者均可以用逗号分隔字符串、正则表达式或一个数组来表示:api
<keep-alive :include="/mytable | mybuttom/" :exclude="/myselect/"> <component :is="componentName"></component> </keep-alive>
咱们看到component
是渲染动态组件用的,它渲染的组件跟is
后面的组件名称有关系,当componentName
变化是,包含在include
里面的正则表达式:/mytable | mybuttom/
里面的组件会被缓存起来,再次出现时,不会从新created
,而不在exclude
里面的组件会被缓存。上面的使用方式对于路由来讲,也适用。
注意:全部的匹配都是匹配组件的 name,没有设置 name 的组件或者路由则不会被匹配数组
<keep-alive :include="keepAliveArr"> <component :is="componentName"></component> </keep-alive>
咱们只须要动态改变keepAliveArr
里面的值就能动态设置哪些组件或者路由页面须要缓存了,很灵活。缓存
咱们都知道vue
组件的生命周期会触发beforeCreate、created 、beforeMount、 mounted
这些钩子函数,可是被缓存的组件或者页面在第一次渲染以后,再次进入不会再触发上面的钩子函数了,而是触发activated
钩子函数,能够将逻辑放到这里面去作。
同理:离开缓存组件的时候,beforeDestroy和destroyed
并不会触发,可使用deactivated
离开缓存组件的钩子来代替。
更多更细节的讲解能够参考vue
的官方文档:
官方文档
学习如逆水行舟,不进则退,前端技术飞速发展,若是天天不坚持学习,就会跟不上,我会陪着你们,天天坚持推送博文,跟你们一同进步,但愿你们能关注我,第一时间收到最新文章。
公众号前端每日面试题分享: