vue生命周期共分為八個階段:創(chuàng)建前/后,載入前/后,更新前/后,銷毀前/后。
beforeCreate(創(chuàng)建前)vue實例的掛載元素$el和數(shù)據(jù)對象data都是undefined,還未初始化(創(chuàng)建了掛載元素跟數(shù)據(jù)對象還未初始化)
created(創(chuàng)建后)完成了data數(shù)據(jù)初始化,el還未初始化(數(shù)據(jù)初始化,掛載元素還未初始化)
beforeMount(載入前)vue實例的$el和data都初始化了,已經(jīng)生成了html,此時還沒有掛載到頁面上。(掛數(shù)據(jù)初始化完后并且生成了html,但是還沒有掛在到頁面)
mounted(載入后)在el新被創(chuàng)建的vm.$el替換,并掛載到實例上去之后調(diào)用。實例已經(jīng)完成了以下的配置:用上面編譯好的html內(nèi)容替換el屬性指向dom元素。完成模板中html渲染到html頁面中,此過程中進行ajax交互。(用編譯完后的html內(nèi)容替換el屬性,進行ajax的交互,進行頁面的渲染)
beforeUpdate(更新前)在數(shù)據(jù)更新之前調(diào)用,發(fā)生在虛擬dom重新渲染和打補丁之前調(diào)用。可以再鉤子中進一步地更新狀態(tài),不會觸發(fā)附加的重渲染過程(進一步的更新狀態(tài),不會觸發(fā)重渲染)
Update(更新后)由于數(shù)據(jù)更改導(dǎo)致的虛擬dom重新渲染和打補丁之后調(diào)用。調(diào)用時,組件dom已經(jīng)更新,所以可以執(zhí)行依賴于dom的操作。然而在大多數(shù)情況下,應(yīng)該避免在此期間更改狀態(tài),因為這可能會導(dǎo)致更新無限循環(huán)。該鉤子在服務(wù)器端渲染期間不被調(diào)用。(由于數(shù)據(jù)的更改導(dǎo)致需要重新調(diào)用,因為調(diào)用時dom已經(jīng)進行更新,所有要執(zhí)行依賴于dom的操作,但是大多情況下應(yīng)該避免此時更新狀態(tài)。因為可能會導(dǎo)致更新的無限循環(huán))
beforeDestroy(銷毀前)在實例銷毀之前調(diào)用。實例仍然完全可用
dastory(銷毀后)在實例銷毀之后調(diào)用。調(diào)用后,所有的事件監(jiān)聽器會被移除,所有的子實例也會被銷毀。該鉤子在服務(wù)器端渲期間不被調(diào)用。(在實例銷毀之前調(diào)用,并且所有的事件監(jiān)聽器都被移除子實例全部銷毀。)
vue生命周期鉤子:
生命周期鉤子是在Vue對象生命周期的某個階段執(zhí)行的已定義方法。
第一次頁面加載會觸發(fā)哪幾個鉤子?
會觸發(fā) 下面這幾個beforeCreate, created, beforeMount, mounted 。(創(chuàng)建前/后,載入前/后)
vue生命周期的作用是什么?
它的生命周期中有多個事件鉤子,讓我們在控制整個Vue實例的過程時更容易形成好的邏輯。(讓我們可以在控制整個Vue實例的過程中更容易形成好的邏輯)
什么是vue生命周期?
?Vue 實例從創(chuàng)建到銷毀的過程,就是生命周期。從開始創(chuàng)建、初始化數(shù)據(jù)、編譯模板、掛載Dom→渲染、更新→渲染、銷毀等一系列過程,稱之為 Vue 的生命周期。

vue雙向綁定數(shù)據(jù)的原理:
vue.js是采用數(shù)據(jù)劫持結(jié)合發(fā)布者-訂閱者模式的方式,通過Object.defineProperty()來劫持各個屬性的setter,getter,在數(shù)據(jù)變動時發(fā)布消息給訂閱者,觸發(fā)相應(yīng)的監(jiān)聽回調(diào)。
vue實現(xiàn)數(shù)據(jù)雙向綁定的原理就是用object. defineproperty ()重新定義,(set方法)對象設(shè)置屬性值和(get方法)獲取屬性值的操縱來實現(xiàn)的。(用defineproperty()重新定義、(set方法)對象設(shè)置屬性值和(get方法)獲取屬性值的操縱來實現(xiàn)的)
object.defineproperty() 方法解釋:object.definepropert(參數(shù)1,參數(shù)2,參數(shù)3),返回值為該對象的obj
參數(shù)1是obj,參數(shù)2是定義或者修改的對象的屬性名,參數(shù)3是屬性描述符(分為:屬性描述符跟存取描述符,兩種方法二選一,不能混合使用。get和set屬于存取描述符的對象屬性)。
創(chuàng)建發(fā)布類和訂閱類,如下:

observer,創(chuàng)建數(shù)據(jù)監(jiān)聽,并為每個屬性建立一個發(fā)布類。
Dep是發(fā)布類,維護與該屬性相關(guān)的訂閱實例,當(dāng)數(shù)據(jù)發(fā)生更新時,會通知所有的訂閱實例。
Watcher是訂閱類,注冊到所有相關(guān)屬性的Dep發(fā)布類中,接受發(fā)布類的數(shù)據(jù)變更通知,通過回調(diào),實現(xiàn)視圖的更新
