1. 程式人生 > >vue實例生命周期詳解

vue實例生命周期詳解

-s 不可見 back 子函數 put 之前 取數據 進一步 app

每個 Vue 實例在被創建之前都要經過一系列的初始化過程。

例如,實例需要配置數據觀測(data observer)、編譯模版、掛載實例到 DOM ,然後在數據變化時更新 DOM 。

在這個過程中,實例也會調用一些 生命周期鉤子 ,這就給我們提供了執行自定義邏輯的機會。例如,created 這個鉤子在實例被創建之後被調用

var vm = new Vue({
  data: {
    a: 1
  },
  created: function () {
    // `this` 指向 vm 實例
    console.log(‘a is: ‘ + this.a)  // -> "a is: 1"
} })

也有一些其它的鉤子,在實例生命周期的不同階段調用,如 mountedupdateddestroyed。鉤子的 this 指向調用它的 Vue 實例。

生命周期圖示

技術分享

beforeCreate:在實例初始化之後,數據觀測(data observer) 和 event/watcher 事件配置之前被調用

created:實例已經創建完成之後被調用。在這一步,實例已完成以下的配置:數據觀測(data observer),屬性和方法的運算, watch/event 事件回調。然而,掛載階段還沒開始,$el 屬性目前不可見

beforeMount:在掛載開始之前被調用:相關的 render 函數首次被調用

mounted:el 被新創建的 vm.$el 替換,並掛載到實例上去之後調用該鉤子。如果 root 實例掛載了一個文檔內元素,當 mounted 被調用時 vm.$el 也在文檔內。

beforeUpdate:數據更新時調用,發生在虛擬 DOM 重新渲染和打補丁之前。 你可以在這個鉤子中進一步地更改狀態,這不會觸發附加的重渲染過程。當這裏獲取數據時是更新後的數據

updated:由於數據更改導致的虛擬 DOM 重新渲染和打補丁,在這之後會調用該鉤子。當這個鉤子被調用時,組件 DOM 已經更新,所以你現在可以執行依賴於 DOM 的操作。然而在大多數情況下,你應該避免在此期間更改狀態,因為這可能會導致更新無限循環。該鉤子在服務器端渲染期間不被調用。

beforeDestroy:實例銷毀之前調用。在這一步,實例仍然完全可用。

destroyed:Vue 實例銷毀後調用。調用後,Vue 實例指示的所有東西都會解綁定,所有的事件監聽器會被移除,所有的子實例也會被銷毀。 該鉤子在服務器端渲染期間不被調用。

接下來做一個例子,看一下Vue中所有的生命周期怎麽用的

<template>
  <div id="app">
    <p>{{ number }}</p>
    <input type="text" name="btnSetNumber" v-model="number">
  </div>
</template>

<script>
export default {
  name: app,
  data () {
    return {
      number: 1
    }
  },
  beforeCreate: function () {
    console.log(beforeCreate 鉤子執行...)
    console.log(this.number)
  },
  created: function () {
    console.log(created 鉤子執行...)
    console.log(this.number)
  },
  beforeMount: function () {
    console.log(beforeMount 鉤子執行...)
    console.log(this.number)
  },
  mounted: function () {
    console.log(mounted 鉤子執行...)
    console.log(this.number)
  },
  beforeUpdate: function () {
    console.log(beforeUpdate 鉤子執行...)
    console.log(this.number)
  },
  updated: function () {
    console.log(updated 鉤子執行...)
    console.log(this.number)
  },
  beforeDestroy: function () {
    console.log(beforeDestroy 鉤子執行...)
    console.log(this.number)
  },
  destroyed: function () {
    console.log(destroyed 鉤子執行...)
    console.log(this.number)
  }
}
</script>

<style>
</style>

技術分享

當更新數據是調用update鉤子函數

技術分享

vue實例生命周期詳解