官方生命周期图:
image.png
列表图
image.png
image.png
总结
- beforecreated:el 和 data 并未初始化
- created: 完成了 data 数据的初始化,el没有
- beforeMount:完成了 el 和 data 初始化
- mounted :完成挂载
实际开发中如何使用
beforecreate : 可以在这加个loading事件
created :在这结束loading,还做一些初始化,实现函数自执行
mounted : 在这发起后端请求,拿回数据,配合路由钩子做一些事情
beforeDestroy: 你确认删除XX吗? destroyed :当前组件已被删除,清空相关内容
贴下代码:
- 在chrome中 打开 console即可查看
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>vue-lifecycle</title>
<script src="https://unpkg.com/vue/dist/vue.js"></script>
</head>
<body>
<hr>
<div id="container">
<button @click="changeMsg()">点击刷新</button>
<button @click="destroy()">destroy</button>
<h4>{{'页面加载状态信息监听 :'+msg}}</h4>
</div>
<script type="text/javascript">
var vm = new Vue({
// el:'#container',
data:{
msg:'初始加载',
i: 0
},
beforeCreate(){
console.group("%c%s","color:red",'beforeCreate--实例创建前状态')
console.log("%c%s","color:blue","el :"+this.$el) //undefined
console.log("%c%s","color:blue","data :"+this.$data) //undefined
console.log("%c%s","color:blue","msg :"+this.msg) //undefined
},
created() {
console.group("%c%s","color:red",'created--实例创建完成状态')
console.log("%c%s","color:blue","el :"+this.$el) //undefined
console.log("%c%s","color:blue","data :"+this.$data) //已被初始化
console.log("%c%s","color:blue","msg :"+this.msg) //已被初始化
},
beforeMount() {
console.group("%c%s","color:red",'beforeMount--挂载之前的状态')
console.log("%c%s","color:blue","el :"+this.$el) //已被初始化
console.log(this.$el);
console.log("%c%s","color:blue","data :"+this.$data)
console.log("%c%s","color:blue","msg :"+this.msg)
console.log("%s%o","document.getElementById('container'): ",document.getElementById('container'))
},
mounted() {
console.group("%c%s","color:red",'mounted--已经挂载的状态')
console.log("%c%s","color:blue","el :"+this.$el)
console.log(this.$el);
console.log("%c%s","color:blue","data :"+this.$data)
console.log("%c%s","color:blue","msg :"+this.msg)
console.log("%s%o","document.getElementById('container'): ",document.getElementById('container'))
},
beforeUpdate(){
console.group("%c%s","color:red",'beforeUpdate--数据更新前的状态')
if(this.$el.innerHTML){
console.log("%c%s","color:blue","el :"+this.$el.innerHTML)
}
console.log(this.$el);
console.log("%c%s","color:blue","data :"+this.$data)
console.log("%c%s","color:blue","msg :"+this.msg)
if(document.getElementById('container')!=null){
console.log("%c%s","color:green","真实的 DOM 结构:"+document.getElementById('container').innerHTML)
}
},
updated() {
console.group("%c%s","color:red",'updated--数据更新完成时状态')
console.log("%c%s","color:blue","el :"+this.$el.innerHTML)
console.log(this.$el);
console.log("%c%s","color:blue","data :"+this.$data)
console.log("%c%s","color:blue","msg :"+this.msg)
if(document.getElementById('container')!=null){
console.log("%c%s","color:green","真实的 DOM 结构:"+document.getElementById('container').innerHTML)
}
},
activated() {
console.group("%c%s","color:red",'activated-- keep-alive 组件激活时调用')
console.log("%c%s","color:blue","el :"+this.$el)
console.log(this.$el);
console.log("%c%s","color:blue","data :"+this.$data)
console.log("%c%s","color:blue","msg :"+this.msg)
},
deactivated(){
console.group("%c%s","color:red",'deactivated-- keep-alive 停用时调用')
console.log("%c%s","color:blue","el :"+this.$el)
console.log(this.$el);
console.log("%c%s","color:blue","data :"+this.$data)
console.log("%c%s","color:blue","msg :"+this.msg)
},
beforeDestroy() {
console.group("%c%s","color:red",'beforeDestroy-- vue实例销毁前的状态')
console.log("%c%s","color:blue","el :"+this.$el)
console.log(this.$el);
console.log("%c%s","color:blue","data :"+this.$data)
console.log("%c%s","color:blue","msg :"+this.msg)
},
destroyed() {
console.group("%c%s","color:red",'destroyed-- vue实例销毁完成时调用')
console.log("%c%s","color:blue","el :"+this.$el)
console.log(this.$el);
console.log("%c%s","color:blue","data :"+this.$data)
console.log("%c%s","color:blue","msg :"+this.msg)
},
methods: {
changeMsg() {
this.msg = '刷新了' + this.i++ + '次';
},
destroy() {
this.$destroy()
}
},
})
vm.$mount('#container')
</script>
</body>
</html>