beforeCreate
beforeCreate() { console.log("beforeCreate"); console.log(this.$el); //undefined console.log(this.$data); //undefined },
beforeCreate时没有挂载el,也没有data对象
created
created() { console.log("created"); console.log(this.$el); console.log(this.$data); },
created时没有挂载el,有data对象
beforeMount
beforeMount() { console.log("beforeMount"); console.log(this.$el); console.log(this.$data); },
beforeMount时没有挂载el,有data对象,仍然是虚拟DOM
mounted
mounted() { console.log("mounted"); console.log(this.$el); console.log(this.$data); },
mounted时el已挂载,有data对象
在mounted之前p中还是通过{{message}}进行占位的,因为此时还没有挂在到页面上,还是JavaScript中的虚拟DOM形式存在的。在mounted之后可以看到h1中的内容发生了变化。
beforeUpdate和updated钩子
当vue发现data中的数据发生了改变,会触发对应组件的重新渲染,先后调用beforeUpdate和updated钩子函数。
在beforeUpdate可以监听到data的变化,但是view层没有被重新渲染,view层的数据没有变化。等到updated的时候,view层才被重新渲染,数据更新。
beforeDestroy和destroyed钩子
beforeDestroy钩子函数在实例销毁之前调用。在这一步,实例仍然完全可用。
destroyed钩子函数在Vue 实例销毁后调用。调用后,Vue 实例指示的所有东西都会解绑定,所有的事件***会被移除,所有的子实例也会被销毁。
父子生命周期
- 加载渲染过程
父beforeCreate->父created->父beforeMount->子beforeCreate->子created->子beforeMount->子mounted->父mounted - 子组件更新过程
父beforeUpdate->子beforeUpdate->子updated->父updated - 父组件更新过程
父beforeUpdate->父updated - 销毁过程
父beforeDestroy->子beforeDestroy->子destroyed->父destroyed