
lifecycle.png
这里在多提一嘴
keep-alive
什么是组件缓存? 如果对组件进行了缓存, 就是 一旦组件被创建, 那么就不会在切换组件时被销毁。
格式:
<keep-alive>
要缓存的内容
</keep-alive>
一般在动态组件和路由组件时使用。
activated和deactivated
对于组件如果采用了keep-alive,则组件会多出两个钩子函数:
activated: 组件激活
deactivated:组件失活
<div id="app">
<button @click="comName='mycom1'">显示mycom1</button>
<button @click="comName='mycom2'">显示mycom2</button>
<!-- commponent是vue中动态组件:它是一个容器,自已是没有内容,你可以在其中放入任意的组件
它有一个属性名:is ,值是一个字符串,就是当前注册的组件的名字
keep-alive: 用来对组件进行缓存。
缓存之后:
1. 组件的切换就不会再去执行销毁和创建了。只需创建一次。
2. 组件多出两个钩子函数:
activated和deactivated,分别表示组件处于激活和失活状态
主要应用场景,有两个:
(1)里面放动态组件
<keep-alive>
<component :is="comName"></component>
</keep-alive>
(2)里面放路由出口
<keep-alive>
<router-view></router-view>
</keep-alive>
-->
<keep-alive>
<component :is="comName"></component>
</keep-alive>
</div>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script>
var vm = new Vue({
el: '#app',
components: {
mycom1: {
template: `<div> 子组件MyCom1 {{d}}</div>`,
data(){return {d: Date.now()}},
activated(){
console.log('com1处于激活状态')
},
deactivated () {
console.log('com1处于失活状态')
},
created() {
console.log('com1:创建')
},
destroyed() {
console.log('com1: destory')
}
},
mycom2: {
template: `<div> 子组件MyCom2</div>`,
created() {
console.log('com2:创建')
},
destroyed() {
console.log('com2: destory')
},
activated(){
console.log('com2处于激活状态')
},
deactivated () {
console.log('com2处于失活状态')
},
},
},
data: {
comName: 'mycom1'
}
})
</script>
