Vue.js生命週期函數

一、Vue.js生命週期簡介 (直觀圖)

二、生命週期函數就是vue實例在某一個時間點會自動執行的函數

從Vue的創建到運行、銷燬總是伴隨着各種各樣的事件,這些事件統稱爲生命週期,生命週期鉤子是別名。Vue的生命週期,也就是鉤子函數;Vue一共有10個生命週期函數,

三、生命週期函數分類:

  • 創建階段的生命週期函數

        首先通過var vm  = new Vue({}) 創建一個Vue實例對象,vm是一個空的Vue實例對象

  1. beforeCreate() 初始化之後) 在beforeCreate()生命週期函數執行的時候,vue對象中的data和methods中的數據沒有初始化,在beforeCreate()中無法訪問data數據和methods中的方法;
  2. created() 創建完成 )此時data數據和methods中的方法已經初始化好了,也就是說,created()函數是最早能夠訪問data數據和methods中的方法的生命週期函數;
  3. beforeMount()掛載之前)beforeMount()函數之前,Vue開始編譯模板,把Vue代碼中的指令進行執行,最終在內存中生成一個編譯好的模板字符串,然後把這個模板字符串渲染爲內存中的DOM。注意:此時只是把模板字符串渲染在內存中,還沒有真正掛載在頁面上。當beforeMount()函數執行的時候,模板已經在內存中編譯好了,只是沒有渲染到頁面上,頁面中還是舊的模板字符串,沒有被真正的數據值替換過來;
  4. mounted()被掛載之後)此函數執行時,模板字符串已經真正的掛載在頁面中,用戶可以看到渲染好的頁面,注意:mounted是創建階段的最後一個生命週期函數,當mounted執行完,表示實例已經創建好了。此時組件脫離創建階段,進入運行階段
  • 運行階段的生命週期函數
  1. beforeUpdate()數據更新前)此函數執行時,界面數據還沒有更新,但是data中的數據已經更新了,頁面尚未和內存中的data同步;
  2. updated()被更新後)先根據data中最新的數據在內存中重新渲染一份新的DOM樹,然後把最新的DOM樹渲染到真正的頁面中去,就完成了從data(Model)→ view的更新;此函數執行時,頁面data已經和內存中保持同步,都是最新的數據。

<keep-alive>包裹的動態組件會被緩存,它是一個抽象組件,它自身不會渲染一個dom元素,也不會出現在父組件鏈中。當組件在 <keep-alive> 內被切換,它的 activated 和 deactivated 這兩個生命週期鉤子函數將會被對應執行。

  • activated() keep-alive組件激活時調用,也就是當頁面存在緩存時調用。進入當前存在activated()函數的頁面時,一進入頁面就觸發,可用於初始化頁面數據等
  • deactivated()  keep-alive 組件停用時調用,該鉤子在服務器端渲染期間不被調用,在頁面結束時觸發該方法,可清除掉滾動方法等緩存。
  • 銷燬階段的生命週期函數
  1. beforeUpdate() 銷燬之前)當執行beforeUpdate()函數時,Vue實例已經從運行階段進入銷燬階段,當執行beforeUpdate()時候,data和methods、指令、過濾器還處於可用狀態,沒有被銷燬;
  2. destoryed()銷燬之後)當執行destoryed()函數時候,組件已經完全銷燬,所有數據都不可用;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章