Vue的生命周期
Vue的生命周期图

红色圈出来的都是钩子函数,成对的,和el、template、data一个级别。
组件也是一个Vue实例,也有这些生命周期,并不是说要显式new Vue()才是一个Vue对象。
demo Vue的生命周期
index.html
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title></title> <!-- 引入vue.js --> <script src="js/vue.js" type="text/javascript" charset="utf-8"></script> </head> <body> <div id="app"></div> <script src="js/test.js"></script> </body> </html>
把js脚本单独拿了出来
test.js
Vue.component('Test',{
template:`
<div>
<p>{{msg}},我是test组件</p>
<button @click='msg+=" chy"'>更新数据</button> <!-- +是字符串拼接 -->
</div>
`,
data(){
return{
msg:'hello'
}
},
// 组件创建前,数据尚未挂载
beforeCreate(){
console.log('组件创建前',this.msg); //this.msg是undefined
},
// 组件创建后,数据已挂载
created(){
console.log('组件创建后',this.msg); //this.msg有值
},
// dom挂载前,此时此组件的dom尚未挂载
beforeMount() {
console.log('dom挂载前',document.body.innerHTML); //<div id="app"></div>
},
// dom挂载后,此时此组件的dom已挂载
mounted() {
console.log('dom挂载后',document.body.innerHTML); //<div><div><p>hello,我是test组件</p></div></div>
},
// 组件激活。dom挂载后,组件会被激活
activated() {
console.log('组件激活')
},
// 组件停用
deactivated() {
console.log('组件停用');
},
// 数据更新前,数据指的是内存中的数据,比如msg
beforeUpdate() {
console.log('数据更新前',document.body.innerHTML);
},
// 数据更新后
updated() {
console.log('数据更新后',document.body.innerHTML); //如果打印的是this.msg,数据要已发生更新才能界定更新前后,此时数据已变了,更新前后打印出来的this.msg是一样的
},
// 组件销毁前
beforeDestroy() {
console.log('组件销毁前');
},
// 组件销毁后
destroyed() {
console.log('组件销毁后');
},
})
new Vue({
el:'#app',
template:`
<div>
<Test v-if='display'></Test> <!--绑定内存中给的display变量。v-if不显示组件时,会销毁组件;显示组件时,是重新创建组件-->
<button @click='createOrDestroy'>销毁|创建组件</button>
</div>
`,
data(){
return{
display:true
}
},
methods:{
createOrDestroy(){
this.display=!this.display; //换为相反的
}
}
});
<keep-alive><Test v-if='display'></Test></keep-alive>
性能调优
频繁的新建组件对性能有很大的影响。可以把组件放在<keep-alive>中:
<keep-alive> <Test v-if='display'></Test> </keep-alive>
这样v-if为false时会缓存组件(停用组件),并不是直接销毁;当v-if为true时又激活组件。

浙公网安备 33010602011771号