vue實例有一個完整的生命周期,也就是從開始創建、初始化數據、編譯模板、掛載Dom、渲染->更新->渲染、卸載等一系列過程,我們稱這是vue的生命周期。
通俗的將就是vue實例從創建到銷毀的過程,就是生命周期。
生命周期 鈎子函數就是這些事件
beforecreat創建前狀態,created創建完畢狀態,beforemount掛載前狀態,mounted掛載結束狀態,beforeupdate更新前狀態,updataed更新后狀態,beforedestory銷毀前狀態,destory銷毀后狀態。
<!DOCTYPE html >
<html>
<head>
<div id='div1' v-bind:title="div_title">{{hello_message}}</div>
</head>
<body>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script>
var v1 = new Vue({
el: "#div1",
data: {
hello_message: "Hello, there welcome to VueJS world",
div_title: "This is my intro div",
},
beforeCreate: function(){alert('Before Create');},
created: function(){alert('Created');},
beforeMount: function(){alert('Before Mount');},
mounted: function(){alert('Mounted');},
beforeUpdate: function(){alert('Before Update');},
updated: function(){alert('Updated');},
beforeDestroy: function(){alert('Before Destroy');},
destroyed: function(){alert('Destroyed');}});//To fire updatev1.$data.hello_message = "New message";
// This can be invoked to destroy the object, which will fire the destroy hook//v1.$destroy();
</script>
</body>
</html>
beforeCreate(新對象誕生)
Vue對象用新方法實例化。它創建一個Vue類的對象來處理DOM元素。對象的這個生命階段可以通過beforeCreated 掛鈎來訪問 。我們可以在這個鈎子中插入我們的代碼,在對象初始化之前執行。
Create(具有默認特性的對象,實例創建成功,此時 data 中的數據顯示出來了)
在這個生命階段,對象及其事件完全初始化。 created 是訪問這個階段並編寫代碼的鈎子。
beforeMounted(數據中的 data 在模版中先占一個位置)
這個鈎子被調用 beforeMounted。在這個階段,它檢查是否有任何模板可用於要在DOM中呈現的對象。如果沒有找到模板,那么它將所定義元素的外部HTML視為模板。
Mounted(模版中的 data 數據直接顯示出來了)
一旦模板准備就緒。它將數據放入模板並創建可呈現元素。用這個新的數據填充元素替換DOM元素。這一切都發生在mounted鈎子上。
beforeUpdate(更改已完成,但尚未准備好更新DOM)
在外部事件/用戶輸入beforeUpdate發生更改時,此鈎子即 在反映原始DOM元素的更改之前被觸發。
為了解決這個問題 beforeUpdated,我添加了下面的代碼。它通過更新DOM來更改運行時中的hello_message。
// To fire updatev1.$data.hello_message="New message";
Update(在DOM中呈現的更改)
然后,通過實際更新DOM對象並觸發updated,屏幕上的變化得到呈現 。
數據更改導致的虛擬 DOM 重新渲染和打補丁
beforeDestroy(對象准備死掉)
在 vue 實例銷毀之前調用,此時實例任然可用
就在Vue對象被破壞並從內存中釋放之前, deforeDestroy 鈎子被觸發,並允許我們在其中處理我們的自定義代碼。
為了激發這個鈎子,我添加了下面的代碼來銷毀Vue對象。
//這可以被調用來銷毀該對象,這將觸發銷毀鈎v1.$ destroy();
Destroy(對象停止並從內存中刪除)
在 vue 實例銷毀之后調用,vue 實例指示的所有東西都會解綁定,所有的事件監聽器會被移除,所有的子實例也會被銷毀
該 destroyed 鈎子被成功運行銷毀對象上調用。
附上官方生命周期詳解圖:
總結:我們可以使用生命周期鈎子在Vue對象生命周期的不同階段添加我們的自定義代碼。它將幫助我們控制在DOM中創建對象時創建的流程,以及更新和刪除對象。