vue 各生命钩子调用时间及执行原理

128 阅读1分钟

                   

  1. beforeCreate

调用时间:在实例初始化之后,数据观测 (data observer) 和 event/watcher 事件配置之前被调用。

  2.created

调用时间:在实例创建完成后被立即调用。

在这一步,实例已完成以下的配置:数据观测 (data observer),属性和方法的运算,watch/event 事件回调。然而,挂载阶段还没开始,$el 属性目前尚不可用。

  3.beforeMount

调用时间:在挂载开始之前被调用,相关的 render 函数首次被调用。

该钩子在服务器端渲染期间不被调用。

  4.mounted

调用时间:实例被挂载后调用,el 被新创建的 vm.$el 替换了。

  5.beforeUpdate

调用时间:数据更新时调用,发生在虚拟 DOM 打补丁之前。

  6.updated
调用时间:由于数据更改导致的虚拟 DOM 重新渲染和打补丁,在这之后会调用该钩子。

  7.beforeDestroy
调用时间:实例销毁之前调用。在这一步,实例仍然完全可用。

  8.destroyed

调用时间:实例销毁后调用。该钩子被调用后。

对应 Vue 实例的所有指令都被解绑,所有的事件监听器被移除,所有的子实例也都被销毁。



详细执行过程看代码

<script type="text/javascript">
var vm = new Vue({
	el : "#app",
	data : {
		msg : "hi vue",
	},
	//在实例初始化之后,数据观测 (data observer) 和 event/watcher 事件配置之前被调用。
	beforeCreate:function(){
		console.log('beforeCreate');
	},
	/* 在实例创建完成后被立即调用。
	在这一步,实例已完成以下的配置:数据观测 (data observer),属性和方法的运算,watch/event 事件回调。
	然而,挂载阶段还没开始,$el 属性目前不可见。 */
	created	:function(){
		console.log('created');
	},
	//在挂载开始之前被调用:相关的渲染函数首次被调用
	beforeMount : function(){
		console.log('beforeMount');

	},
	//el 被新创建的 vm.$el 替换, 挂在成功	
	mounted : function(){
		console.log('mounted');
	
	},
	//数据更新时调用
	beforeUpdate : function(){
		console.log('beforeUpdate');
			
	},
	//组件 DOM 已经更新, 组件更新完毕 
	updated : function(){
		console.log('updated');
			
	}
});
setTimeout(function(){
	vm.msg = "change ......";
}, 3000);