“面向开发文档学习”之Vue基础(二)生命周期钩子

生命周期钩子

create 和 mounted

在实例创建完成后被立即调用。在这一步,实例已完成以下的配置:数据观测 (data observer),property 和方法的运算,watch/event 事件回调。然而,挂载阶段还没开始,$el property 目前尚不可用。
以上是官方文档对于create生命周期钩子的解释。这里指的注意的是挂载阶段还未开始。怎么理解呢,可以理解为挂载未开始也就是说模板template还未渲染成html页面,所以此时我们通过document.getElementById()通过id名查到页面元素的时候列如属性innerHtml则会出现{{data}}而不是值。下面和mounted函数一起学习直观感受二者区别官方对于mounted的解释:实例被挂载后调用,这时 el 被新创建的 vm. $el 替换了。如果根实例挂载到了一个文档内的元素上,当 mounted 被调用时 vm. $el 也在文档内。

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<script src="vue.js" type="text/javascript" charset="utf-8"></script>
</head>
<body>

<div id="app">
	{{msg}}
</div>
<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');
		console.log(this.msg);
		console.log(document.getElementById('app').innerHTML)
	},
	//在挂载开始之前被调用:相关的渲染函数首次被调用
	beforeMount : function(){
		console.log('beforeMount');
	},
	//el 被新创建的 vm.$el 替换, 挂在成功	
	mounted : function(){
		console.log('mounted');
		console.log(document.getElementById('app').innerHTML)
		console.log(this.msg);
	},
	//数据更新时调用
	beforeUpdate : function(){
		console.log('beforeUpdate');
			
	},
	//组件 DOM 已经更新, 组件更新完毕 
	updated : function(){
		console.log('updated');
			
	}
});
setTimeout(function(){
	vm.msg = "change ......";
}, 3000);
</script>
</body>
</html>

直接看结果

在这里插入图片描述
从结果来看 create函数的时候msg的数值并未被渲染上html上。而到了mounted的时候页面已经将msg渲染至页面上,这便是create和mounted的区别。
以上例子值得注意的还有:

setTimeout(function(){
	vm.msg = "change ......";
}, 3000);

这类似一个定时器的感觉,3000ms后执行该函数,将vm实例中msg属性的值变为change…

beforeUpdate和updated

那么这时候可以引出beforeUpdate和updated两个函数,他们在数据发生更新的时候进行调用。在今后的学习工作中有很多机会使用。

猜你喜欢

转载自blog.csdn.net/qq_42285889/article/details/106365095