Vue生命週期

2021-09-27 23:59:49 字數 2828 閱讀 8410

瀏覽器啟用了懶載入機制,在除錯的時候,如果使用如下**先後列印同一物件,並且列印的時候未展開物件:

var person =

console.

log(person)

// 修改person的屬性

person.name =

'222'

console.

log(person)

兩次列印均是修改後的person:

person:

解決方法:1.使用json.stringify函式來列印

2.在列印完一次物件後立即在瀏覽器展開該物件

虛擬dom物件類似如下格式

var domobject =,]}]}

使用虛擬dom可以快速替換差異節點?

使用虛擬dom來對映真實的dom元素,如果產生了差異,採用diff演算法來比較差異,

然後通過js物件與dom樹的對映關係找到相應dom節點並將差異屬性替換即可

為什麼自定義物件來實現虛擬dom而不是直接使用getelement…而得到的dom物件?

如果直接使用dom物件,其屬性會有很多,記憶體消耗比較嚴重,而這種方式物件內只有部分屬性
首先是官方的vue生命週期流程圖:主要觀測一下五個引數

列印結果如下:

這裡可以看出,vue有例項,但是由於瀏覽器懶載入原因這裡列印的是例項化後的物件

如果使用json.stringfy(this),會報如下錯誤:

一般這種錯誤是因為vue例項中含有迴圈引用或者,比如

var a =

a.b = a

console.

log(

json

.stringfy

(a))

列印結果如下:

1. 引數注入 ------->資料data,監視,以及計算屬性等等--->掛載在vue根屬性上

2. 資料劫持物件(object.defineproperty方法),定義在$options.data中

如果在new vue時未定義el屬性,通過上面流程圖可以看出:

即使有template屬性,如果輸出vm.el仍

未und

efin

ed,因

為卡在了

vm.el仍未undefined,因為卡在了vm.

el仍未un

defi

ned,

因為卡在

了vm.

mount(el)呼叫

// 在new vue時未定義el屬性

var vm =

newvue(,

...}

) console.

log(vm.$el)

----

->undefined vue生命週期已經停止

vm.$mount()

----

>掛載el例項,vue生命週期繼續向下進行

console.

log(vm.$el)

----

>

/h1>

將模板掛載到vue的$el屬性後,通過判斷template模板是否含有,有兩個分支:

含有template模板:

以template作為render函式的值

不含有template模板:

編譯函式將模板編譯成虛擬dom,但是此時的虛擬dom僅僅是通過template而來的dom

如果同時具有template和el屬性,這一步$el會指向el屬性而不是template屬性,到了mounted才會被替換掉

虛擬dom和$el是分開的此時,elel指向的是頁面將要將虛擬dom生成的位置

所以下一步才會建立vm.$el並替換'el',這個後面的el就是此時指向的頁面位置

beforemount類似:

var element = document.

createelement

('div'

) vm.$el = element

mounted類似:

var rootelement = document.

getelementbyid

('demo'

) rootelement.

(element)

監聽資料data變化並重新渲染dom

銷毀vue例項

vue生命週期

beforecreate 元件例項剛剛被建立,屬性都沒有 create 例項已經建立完成,屬性已經繫結 beforemount 模板編譯之前 mounted 模板編譯之後 beforeupdate 元件更新之前 updated 元件更新完畢 beforedestroy 元件銷毀之前 destroye...

vue生命週期

vue把整個生命週期劃分為建立 掛載 更新 銷毀等階段,每個階段都會給一些 鉤子 讓我們來做一些我們想實現的動作。學習例項的生命週期,能幫助我們理解vue例項的運作機制,更好地合理利用各個鉤子來完成我們的業務 我們分別來看看這幾個階段 1.beforecreate 此階段為例項初始化之後,此時的資料...

Vue 生命週期

import vue from vue el root 沒有的話,使用render,繼續沒有,就把el的outerhtml編譯成模板 template temp data beforecreate created el是原來的el beforemount 渲染函式 render h this.tex...