vue的生命周期
每个vue实例从创建到虚拟dom产生再到数据绑定监听数据渲染以及销毁的整个过程。
vue的生命周期一共有八个阶段,分别为:beforeCreate(创建前)、created(创建后)、beforeMount(挂载前)、mounted(挂载后)、beforeUpdate(更新前)、updated(更新后)、beforeDestroy(销毁前)、destroyed(销毁后)。
每个阶段做了什么?
1.beforeCreate(创建前)
实例初始化之前,完成了vue实例的默认生命周期的初始化以及一些事件的初始化,此时不可以访问data和methods。
2.created(创建后)
实例初始化完成后,完成vue的数据注入以及数据监听操作,vue实例创建完毕,可以进行data数据模型和methods方法的访问。
3.beforeMount(挂载前)
在created之后,vue会判断实例中是否含有el属性,如果没有需要手动调用vm.$mount(el),然后判断是否含有template属性,如果有template属性,将template作为模板进行编译,如果没有,则指定el外部的html作为模板进行编译。
<body>
<div id="app">{
{msg}}</div>
<script>
let vm=new Vue({
// el: '#app',
data: {
msg: 'hello Vue'
},
template:'<h1>{
{msg}}</h1>',
});
// 如果没有el属性,手动调用vm.$mount(模板标签)
vm.$mount('#app')
</script>
</body>
4.mounted(挂载后)
实例挂载到页面上,此时可以获取dom元素,也可以发送异步请求。完成了数据绑定操作,在其间执行了render函数,将模板进行了解析,将数据进行了动态绑定。
5.beforeUpdate(更新前)
实例更新会触发的生命周期。数据更新时视图还没有更新,实例找到数据对应得视图进行更新。
6.updated(更新后)
实例更新已经完成,视图已经渲染完成。
实例需要手动销毁:vm.$destroy()
7.beforeDestroy(销毁前)
实例销毁之前,此时仍可以访问实例对象data和methods
8.destroyed(销毁后)
实例销毁完成。完成了监听器,子组件,事件监听等的移除,销毁实力对象。不会重新编译模板
生命周期各个阶段执行次数:
生命周期创建阶段函数(beforeCreate(创建前)/created(创建后))、虚拟dom产生阶段函数(beforeMount(挂载前)/mounted(挂载后))以及销毁阶段函数在整个生命周期都只执行一次,而数据更新阶段函数(beforeUpdate(更新前)/updated(更新后))会执行0次或多次,只要数据不发生变化,这个阶段就不会执行,数据一发生改变,就会执行改变多少次执行多少次。