国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

實例化vue發生了什么?(詳解vue生命周期)

pcChao / 955人閱讀

摘要:實例化發生了什么詳解生命周期本文將對的生命周期進行詳細的講解讓你了解一個實例的誕生都經歷了什么我在上建立了一個存放筆記的倉庫以后會陸續更新一些知識和項目中遇到的坑有興趣的同學可以去看看哈歡迎傳送門實例化一個這是一個方法觸發鉤子函數組件實例剛

實例化vue發生了什么?(詳解vue生命周期)
本文將對vue的生命周期進行詳細的講解,讓你了解一個vue實例的誕生都經歷了什么~

我在Github上建立了一個存放vue筆記的倉庫,以后會陸續更新一些知識和項目中遇到的坑,有興趣的同學可以去看看哈(歡迎star)!

傳送門

實例化一個Vue
const app = new Vue({
  el:"#app",
  data:{
    message:"hello,lifePeriod"
  },
  methods:{
    init(){
      console.log("這是一個方法!")
    }
  }
})
1.觸發 beforeCreate 鉤子函數

組件實例剛被創建,此時無法訪問到 el 屬性和 data 屬性等..

beforeCreate(){

    console.log(`元素:${this.$el}`)   //undefined

    console.log(`屬性message:${this.message}`) //undefined

    console.log(`方法init:${this.init}`)   //undefined
}
2.對data進行雙向綁定,初始化方法(Observer Data && init events)

當一個 vue 實例被創建時,他向 Vue 的響應式系統中加入了其 data 對象中能找到的所有屬性.

利用 es5 特性 Object.defineProperty,遍歷 data 對象下所有屬性,將其轉化為 getter/setter,以便攔截對象賦值與取值操作,然后利用發布/訂閱者模式,從而實現數據的雙向綁定!

所以只有當實例被創建時 data 中存在的屬性才是響應式的!!!!

將methods 下的所有方法進行聲明.

將methods下的方法和data下的屬性通過遍歷和利用 es5 特性 Object.defineProperty代理到實例下.

this.a = this.$data.a = this.data.a;

this.fn = this.$methods.fn = this.methods.fn; 
3.觸發 created 鉤子函數

組件實例創建完成,屬性已綁定,但 DOM 還未生成,$el 屬性還不存在!

created(){

    console.log(`元素:${this.$el}`)   //undefined

    console.log(`屬性message:${this.message}`) //message:hey,vue-lifePeriod!

    console.log(`方法init:${this.init}`)   //function n(n){var r=arguments.length;return r?r>1?t.apply(e,arguments):t.call(e,n):t.call(e)}
}
4.將模板編譯成函數 (compile template into render function)

將模板 template 編譯成 AST 樹、render 函數(new Watch 將模板與數據建立聯系)以及 staticRenderFns 函數(通過 diff 算法優化 dom 更新);
運行 render 方法,返回一個 vnode 對象(virtual dom)

5. 觸發 beforeMount 鉤子函數

模板編譯/掛載之前

beforeMount(){

    console.log(`元素:${(this.$el)}`)

    console.log(this.$el)  //
{{message}}
,我們發現此時的el還未對數據進行渲染.(虛擬dom的內容) }
6. 觸發 mounted 鉤子函數

模板編譯/掛載之后

mounted(){

  console.log(`元素:${(this.$el)}`)

  console.log(this.$el)   //
{{hello,vue-lifePeriod!}}
,已將數據渲染到真實dom }
我們這時將 app.message 改變為"hey,vue-lifePeriod"; 7.觸發 beforeUpdate 鉤子函數

組件更新之前

beforeUpdate(){

    console.log(this.$el.innerHTML);  //hello,vue-lifePeriod   ,此時,元素的真實dom內容還未改變.

}
8.重新渲染虛擬 dom,并通過 diff 算法對比 vnode 節點差異更新真實 dom (virtual DOM re-render and patch) 9.觸發 updated 鉤子函數

組件更新之后

updated(){

  console.log(this.$el.innerHTML);  //hey,vue-lifePeriod   ,此時,元素的真實dom內容已經改變.

}
我們這時調用 app.$destroy()函數對組件進行銷毀 10.觸發 beforeDestroy 鉤子函數

組件銷毀之前

beforeDestroy(){

    console.log(this.$el)   //
{{hey,vue-lifePeriod!}}
console.log(`屬性message:${this.message}`) //message:hey,vue-lifePeriod! console.log(`方法init:${this.init}`) //function n(n){var r=arguments.length;return r?r>1?t.apply(e,arguments):t.call(e,n):t.call(e)} }
11. 銷毀數據監聽,子組件和解除事件監聽! 12. 觸發 destroyed鉤子函數

組件銷毀之后

destroyed(){

    console.log(this.$el)   //
{{hey,vue-lifePeriod!}}
console.log(`屬性message:${this.message}`) //message:hey,vue-lifePeriod! console.log(`方法init:${this.init}`) //function n(n){var r=arguments.length;return r?r>1?t.apply(e,arguments):t.call(e,n):t.call(e)} }

實例銷毀后雖然 dom 和屬性方法都還存在,但改變他們都將不再生效!

app.message = "hu,vue-lifePeriod";

console.log(app.message) //hey,vue-lifePeriod

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/92484.html

相關文章

  • Vue 實例中的生命周期鉤子詳解

    摘要:實例在文檔中經常會使用這個變量名表示實例,在實例化時,需要傳入一個選項對象,它可以包含數據模板掛載元素方法生命周期鉤子等選項。通俗說就是實例從創建到銷毀的過程,就是生命周期。 Vue 實例中的生命周期鉤子 Vue 框架的入口就是 Vue 實例,其實就是框架中的 view model ,它包含頁面中的業務處理邏輯、數據模型等,它的生命周期中有多個事件鉤子,讓我們在控制整個Vue實例的過程...

    gityuan 評論0 收藏0
  • 詳解vue生命周期

    摘要:注意看下此時還是沒有選項鉤子函數和間的生命周期在這一階段發生的事情還是比較多的。鉤子函數和鉤子函數間的生命周期當發現中的數據發生了改變,會觸發對應組件的重新渲染,先后調用和鉤子函數。 首先,每個Vue實例在被創建之前都要經過一系列的初始化過程,這個過程就是vue的生命周期。首先看一張圖吧~這是官方文檔上的圖片相信大家一定都會很熟悉: showImg(https://segmentfau...

    svtter 評論0 收藏0
  • Vue生命周期

    摘要:和下面手動調用在控制臺中輸入在這個階段會銷毀實例,生命周期結束。外部實例中的函數顯示的效果參考鏈接組件的生命周期詳解生命周期 為什么要認識Vue的生命周期 Vue的生命周期是一個非常重要的點,如果不懂Vue的生命周期,那么很多時候,就不知道Vue的實際渲染時機,程序中會出現各種bug。 因此,學習Vue的生命周期是非常用必要的。 showImg(https://segmentfault...

    y1chuan 評論0 收藏0
  • Vue 生命周期詳解

    摘要:的鉤子函數會在組件停用時被調用。是在構造函數中的聲明的變量執行鉤子函數執行執行鉤子函數執行鉤子函數刷新前根據對中的進行排序。 Vue 生命周期詳解 Vue 生命周期流程 最開始,用戶使用 new Vue() 創建根 Vue 實例,或者 Vue 實例化子組件都會調用_init方法(我們將這兩種實例都稱為vm): function Vue(options) { //Vue 構...

    snowLu 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<