当我们开发 Vue.js 应用时,Vue 实例会经历一系列的过程,这些过程被称为“生命周期”。Vue 提供了一些钩子函数,让我们在生命周期不同时刻执行代码以达到相应的目的。下面将详解 Vue 生命周期的完整攻略。
生命周期概述
Vue 生命周期分为八个阶段,每个阶段对应一个钩子函数,以下是八个阶段的钩子函数:
beforeCreate
:在实例初始化之后,数据观测(data observer)和事件配置之前被调用。created
:实例已经创建完成之后被调用。此时实例已经完成以下的配置:数据观测(data observer),属性和方法的运算,watch/event 事件回调。但是挂载阶段还没开始,$el 还不存在。beforeMount
:在挂载开始之前被调用。相关的 render 函数首次被调用。mounted
:el 被新创建的 vm.$el 替换,并挂载到实例上去之后调用该钩子函数。组件已经渲染到页面中,此时可以进行 DOM 操作。beforeUpdate
:数据更新时调用,发生在虚拟 DOM 重新渲染和打补丁之前。updated
:由于数据更改导致的虚拟 DOM 重新渲染和打补丁完成之后调用。beforeDestroy
:实例销毁之前调用。可以在这里进行一些清理工作,比如清除定时器、解绑事件等等。destroyed
:实例销毁之后调用。这个时候,Vue 实例的所有东西都被解绑定,所有的事件监听器和子实例都被移除。
生命周期示例
下面给出两条示例,来说明 Vue 生命周期的使用。
示例一
<template>
<div>
<h1>{{msg}}</h1>
</div>
</template>
<script>
export default {
data () {
return {
msg: 'Hello World!'
}
},
beforeCreate () {
console.log('beforeCreate')
},
created () {
console.log('created')
},
beforeUpdate () {
console.log('beforeUpdate')
},
updated () {
console.log('updated')
},
beforeDestroy () {
console.log('beforeDestroy')
},
destroyed () {
console.log('destroyed')
},
}
</script>
在这个示例中,可以在浏览器控制台观察到 Vue 生命周期的各个阶段的输出。当页面渲染完成之后,通过对 msg 数据进行修改来触发 beforeUpdate、updated 阶段的钩子函数。
示例二
<template>
<div>
<h1>{{msg}}</h1>
<button @click="destroy">销毁组件</button>
</div>
</template>
<script>
export default {
data () {
return {
msg: 'Hello World!'
}
},
beforeCreate () {
console.log('beforeCreate')
},
created () {
console.log('created')
},
beforeUpdate () {
console.log('beforeUpdate')
},
updated () {
console.log('updated')
},
beforeDestroy () {
console.log('beforeDestroy')
},
destroyed () {
console.log('destroyed')
},
methods: {
destroy () {
this.$destroy()
}
}
}
</script>
在这个示例中,通过调用 $destroy()
方法来销毁实例。在组件销毁前,会触发 beforeDestroy 钩子函数。在组件销毁后,会触发 destroyed 钩子函数。可以使用这些钩子函数来进行一些善后工作。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解vue生命周期 - Python技术站