vue生命周期共分為八個(gè)階段:創(chuàng)建前/后叉抡,載入前/后,更新前/后答毫,銷毀前/后褥民。
beforeCreate(創(chuàng)建前)vue實(shí)例的掛載元素$el和數(shù)據(jù)對(duì)象data都是undefined,還未初始化(創(chuàng)建了掛載元素跟數(shù)據(jù)對(duì)象還未初始化)
created(創(chuàng)建后)完成了data數(shù)據(jù)初始化洗搂,el還未初始化(數(shù)據(jù)初始化消返,掛載元素還未初始化)
beforeMount(載入前)vue實(shí)例的$el和data都初始化了,已經(jīng)生成了html耘拇,此時(shí)還沒(méi)有掛載到頁(yè)面上撵颊。(掛數(shù)據(jù)初始化完后并且生成了html,但是還沒(méi)有掛在到頁(yè)面)
mounted(載入后)在el新被創(chuàng)建的vm.$el替換惫叛,并掛載到實(shí)例上去之后調(diào)用倡勇。實(shí)例已經(jīng)完成了以下的配置:用上面編譯好的html內(nèi)容替換el屬性指向dom元素。完成模板中html渲染到html頁(yè)面中嘉涌,此過(guò)程中進(jìn)行ajax交互妻熊。(用編譯完后的html內(nèi)容替換el屬性,進(jìn)行ajax的交互仑最,進(jìn)行頁(yè)面的渲染)
beforeUpdate(更新前)在數(shù)據(jù)更新之前調(diào)用扔役,發(fā)生在虛擬dom重新渲染和打補(bǔ)丁之前調(diào)用【剑可以再鉤子中進(jìn)一步地更新?tīng)顟B(tài)亿胸,不會(huì)觸發(fā)附加的重渲染過(guò)程(進(jìn)一步的更新?tīng)顟B(tài),不會(huì)觸發(fā)重渲染)
Update(更新后)由于數(shù)據(jù)更改導(dǎo)致的虛擬dom重新渲染和打補(bǔ)丁之后調(diào)用。調(diào)用時(shí)损敷,組件dom已經(jīng)更新葫笼,所以可以執(zhí)行依賴于dom的操作。然而在大多數(shù)情況下拗馒,應(yīng)該避免在此期間更改狀態(tài)路星,因?yàn)檫@可能會(huì)導(dǎo)致更新無(wú)限循環(huán)。該鉤子在服務(wù)器端渲染期間不被調(diào)用诱桂。(由于數(shù)據(jù)的更改導(dǎo)致需要重新調(diào)用洋丐,因?yàn)檎{(diào)用時(shí)dom已經(jīng)進(jìn)行更新,所有要執(zhí)行依賴于dom的操作挥等,但是大多情況下應(yīng)該避免此時(shí)更新?tīng)顟B(tài)友绝。因?yàn)榭赡軙?huì)導(dǎo)致更新的無(wú)限循環(huán))
beforeDestroy(銷毀前)在實(shí)例銷毀之前調(diào)用。實(shí)例仍然完全可用
dastory(銷毀后)在實(shí)例銷毀之后調(diào)用肝劲。調(diào)用后迁客,所有的事件監(jiān)聽(tīng)器會(huì)被移除,所有的子實(shí)例也會(huì)被銷毀辞槐。該鉤子在服務(wù)器端渲期間不被調(diào)用掷漱。(在實(shí)例銷毀之前調(diào)用,并且所有的事件監(jiān)聽(tīng)器都被移除子實(shí)例全部銷毀榄檬。)
vue生命周期鉤子:
生命周期鉤子是在Vue對(duì)象生命周期的某個(gè)階段執(zhí)行的已定義方法卜范。
第一次頁(yè)面加載會(huì)觸發(fā)哪幾個(gè)鉤子?
會(huì)觸發(fā) 下面這幾個(gè)beforeCreate, created, beforeMount, mounted 鹿榜。(創(chuàng)建前/后海雪,載入前/后)
vue生命周期的作用是什么?
它的生命周期中有多個(gè)事件鉤子舱殿,讓我們?cè)诳刂普麄€(gè)Vue實(shí)例的過(guò)程時(shí)更容易形成好的邏輯奥裸。(讓我們可以在控制整個(gè)Vue實(shí)例的過(guò)程中更容易形成好的邏輯)
什么是vue生命周期?
?Vue 實(shí)例從創(chuàng)建到銷毀的過(guò)程怀薛,就是生命周期刺彩。從開(kāi)始創(chuàng)建、初始化數(shù)據(jù)枝恋、編譯模板创倔、掛載Dom→渲染、更新→渲染焚碌、銷毀等一系列過(guò)程畦攘,稱之為 Vue 的生命周期。
vue雙向綁定數(shù)據(jù)的原理:
vue.js是采用數(shù)據(jù)劫持結(jié)合發(fā)布者-訂閱者模式的方式十电,通過(guò)Object.defineProperty()來(lái)劫持各個(gè)屬性的setter知押,getter叹螟,在數(shù)據(jù)變動(dòng)時(shí)發(fā)布消息給訂閱者,觸發(fā)相應(yīng)的監(jiān)聽(tīng)回調(diào)台盯。
vue實(shí)現(xiàn)數(shù)據(jù)雙向綁定的原理就是用object. defineproperty ()重新定義罢绽,(set方法)對(duì)象設(shè)置屬性值和(get方法)獲取屬性值的操縱來(lái)實(shí)現(xiàn)的。(用defineproperty()重新定義静盅、(set方法)對(duì)象設(shè)置屬性值和(get方法)獲取屬性值的操縱來(lái)實(shí)現(xiàn)的)
object.defineproperty() 方法解釋:object.definepropert(參數(shù)1良价,參數(shù)2,參數(shù)3)蒿叠,返回值為該對(duì)象的obj
參數(shù)1是obj明垢,參數(shù)2是定義或者修改的對(duì)象的屬性名,參數(shù)3是屬性描述符(分為:屬性描述符跟存取描述符市咽,兩種方法二選一痊银,不能混合使用。get和set屬于存取描述符的對(duì)象屬性)施绎。
創(chuàng)建發(fā)布類和訂閱類溯革,如下:
observer,創(chuàng)建數(shù)據(jù)監(jiān)聽(tīng)粘姜,并為每個(gè)屬性建立一個(gè)發(fā)布類鬓照。
Dep是發(fā)布類,維護(hù)與該屬性相關(guān)的訂閱實(shí)例孤紧,當(dāng)數(shù)據(jù)發(fā)生更新時(shí),會(huì)通知所有的訂閱實(shí)例拒秘。
Watcher是訂閱類号显,注冊(cè)到所有相關(guān)屬性的Dep發(fā)布類中,接受發(fā)布類的數(shù)據(jù)變更通知躺酒,通過(guò)回調(diào)押蚤,實(shí)現(xiàn)視圖的更新