vue的生命周期学习笔记

Vue的生命周期函数有8个,分别是:beforeCreate,   created,   beforeMount,   mounted,   beforeUpdated,   updated,   beforeDestroy,   destroyed.   下面是个人的一些总结。

Vue 实例从创建到销毁的过程,就是生命周期。Vue的生命周期中有多个事件钩子,让我们在控制整个Vue实例的过程时更容易形成好的逻辑。第一次页面加载会触发beforeCreate、created、beforeMount、mounted。

  • beforeCreate   在它之前刚初始化了一个空的vue实例对象,在这个阶段,实例对象身上只有默认的一些生命周期函数和默认的事件,其他的东西都未创建,在这个生命周期函数执行的 时候,data和methods中的数据都还没有初始化  
<div id="app"></div>
	<script>
		var vm = new Vue({
			el: "#app",
			data: {
				msg: "hello"
			},
			methods: {
				show() {
					console.log("我是show方法")
				}
			},
			beforeCreate() {
				console.log(this.msg)
				this.show()
			}
		})
	</script>

 

 

  • created   在created中,data和methods等都已经被初始化好了,所以如果要用到methods中的方法或者操作data中的数据,最早只能在created中操作 

 

不知什么原因,代码编辑器用不了,改为图片

  • beforeMount   接着下来,vue开始编辑模板,执行vue的代码,最终会在内存中生成一个编译好的最终模板字符串,紧接着渲染为内存中的DOM,也就是说,此函数在执行的时候,只是在内存中渲染好了模板,而没有把模板挂载到真正的页面中去,这个阶段,页面还是旧的

从控制台输出的结果看,h1中的内容原本是hello的,但在这个阶段却是 {{ msg }} ,由此说明在 beforeMount 阶段模板还没有被真正替换过来,只是之前写的一些模板字符串

  • mounted   这个时候已经将在内存中编译好的模板,真正的替换到浏览器的页面中去,如果要操作页面上的DOM节点,最早要在mounted中进行。只要执行完了mounted,就表示整个vue实例已经初始化完毕了。此时,组件已经脱离了创建阶段,进入到了运行阶段 

 

 

组件运行阶段的生命周期函数只有两个,beforeUpdate和updated,这两个事件会根据data数据的改变,有选择的触发0次或者多次。

  • beforeUpdate   当执行beforeUpdate的时候,页面中显示的数据还是旧的,不过这个时候data中的数据是最新的,页面尚未和最新的数据保持同步

 从控制台输出的结果看,这个阶段数据已经被更新了,但是我们的界面还没有被更新 

  • updated   到达这个时候,会先根据data中最新的数据, 在内存中重新渲染出一份最新的DOM树,更新完后紧接着把这份最新的DOM树重新渲染到真实的页面中去,这样就完成了data(model层)到view(视图层)的更新。updated事件执行的时候,页面和data中的数据已经保持同步了,都是最新的了

 

  • beforeDestroy   当执行beforeDestroy的时候,vue实例就已经从运行阶段,进入到了销毁阶段。这个时候实例身上的data和methods以及component等等都处于可用状态,还没有真正执行销毁的过程
  • destroyed   当执行到destroyed函数的时候,组件已经被完全销毁了,此时组件中的data,methods等等都已经不可用了