天天看點

Vue:常用鈎子

記錄Vue中常用鈎子,友善回頭溫故複習。

所有的鈎子都在export default{}中

export default {

}      

name:聲明元件名稱

name: "Template",      

data:存儲、傳遞資料

data(){
return{
intro:'huankai',
baidu:'http://www.baidu.com'
    }
  },      

元件中使用資料的幾種方式:

① 雙括号表達式​

​{{}}​

​——直接擷取資料

Vue:常用鈎子

② 強制資料綁定​

​v-bind:​

​或者​

​:​

​——将資料綁定在标簽上,比如于a标簽href等

Vue:常用鈎子

③ 強制事件綁定​

​v-on:click​

​或者​

​@click​

​——将方法綁定在标簽上

Vue:常用鈎子

methods:聲明所有的方法函數

methods:{
study(name){
// name如果沒有接收到值的話,預設是一個事件對象。類型為object
alert(`${typeof name==="string"?name:""}祝你學有所成`)
    }
  }      

computed:定義計算屬性.

Ⅰ、作用:

      ① 減少模闆中的計算邏輯

      ② 進行資料緩存

      ③ 依賴固定的資料類型(響應式資料)

Ⅱ、使用:

      ① 在computed屬性對象中定義計算屬性的方法

      ② 在頁面中使用{{方法名}}來顯示計算的結果

      ③ 通過getter和setter實作對屬性資料的顯示和監視

Ⅲ、get()和set()

      ① 通過get()可以傳回計算屬性的值

      ② 通過set(value)可以觸發修改計算屬性時事件,其中value為更改後的計算屬性的值。

computed: { // 配置計算屬性
// 計算屬性 姓名
fullNameOne: {  // 單向
get() {
return this.firstName + '·' + this.lastName;
      }
    },
fullNameTwo: {  // 雙向
get() {
return this.firstName + '·' + this.lastName;
      },
set(value) {
let name = value.split('·');
this.firstName = name[0];
this.lastName = name[1];
      }
    }
  }      

watch:偵聽器

Ⅰ、作用:

      ① 比computed更加靈活

      ② watch中可以執行任何邏輯,比如:函數節流、Ajax異步擷取、甚至操作DOM

      ③ 依賴固定的資料類型(響應式資料)

Ⅱ、使用:

      ① 通過vm對象的$watch()或者watch配置來監視指定的屬性

      ② 當屬性變化時,回調函數自動調用,在函數内部進行計算

watch: {// 配置監聽watch
// 監聽firstName
firstName(value) {
//console.log(`watch監視到firstName發生改變:${value}`);
this.fullNameThree = value + '·' + this.lastName;
  },
lastName(value) {
//console.log(`watch監視到lastName發生改變:${value}`);
this.fullNameThree = this.firstName + '·' + value;
  }
}      

computed和watch總結

  1. computed能做的,watch都能做,反之則不行
  2. 能用computed的地方,盡可能使用computed
  3. computed是計算一個新的屬性,并将該屬性挂載到vm(Vue執行個體)上,而watch是監聽已經存在并且已經挂載到vm上的資料,是以用watch同樣可以監聽computed計算屬性的變化(其他還有data、props)
  4. computed本質是一個惰性求值的觀察者,具有緩存性,隻有當依賴發生變化後,第一次通路computed屬性,才會計算新的值,而watch則是當資料發生變化便會調用執行函數
  5. 從使用場景上說,computed适用于一個資料被多個資料影響,而watch适用于一個資料影響多個資料

directives:自定義局部指令

​​vue自定義指令​​

filters:自定義局部過濾器

​​vue自定義局部過濾器​​

beforeCreate:在執行個體初始化之後,資料觀測(data observer) 和 event/watcher 事件配置之前被調用。

在建立初始化之前進行的操作,在整個元件尚未初始化的時候進行的操作。這是第一個生命周期函數;元件的data和methods以及頁面DOM結構,都還沒有初始化;是以在這個階段階段,什麼都做不了。

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

這個元件建立階段第二個生命周期函數,此時,元件的data和methods已經可以用了;但是頁面還沒有渲染出來;在這個生命周期函數中,我們經常會發起Ajax請求;

created後,data和methods已經存在了,一般在這個階段發起Ajax網絡請求,請求網絡資料。

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

    當模闆在記憶體中編譯完成,會立即執行執行個體建立階段的第三個生命周期函數,這個函數就是beforeMount,此時記憶體中的模闆結構,還沒有真正渲染到頁面上;此時,頁面上看不到真實的資料,使用者看到的隻是一個模闆頁面而已;

  • mounted :el 被新建立的 vm.$ el 替換,并挂載到執行個體上去之後調用該鈎子。如果 root 執行個體挂載了一個文檔内元素,當 mounted 被調用時 vm.$el 也在文檔内。

    mounted是元件建立階段最後的一個生命周期函數;此時,頁面已經真正的渲染好了,使用者可以看到真實的頁面資料了;當這個生命周期函數執行完,元件就離開了建立階段,進入到了運作中的階段;如果大家使用到一些第三方的UI插件,而且這個插件還需要被初始化,那麼,必須在mounted中來初始化插件;

mounted後,初始化已經全部完成。除了在created中發起網絡請求,在mounted中發起網絡請求也是可以的。

  • beforeUpdate :資料更新時調用,發生在虛拟 DOM 重新渲染和打更新檔之前。你可以在這個鈎子中進一步地更改狀态,這不會觸發附加的重渲染過程。

    在執行beforeUpdate運作中的生命周期函數的時候,資料肯定是最新的;但是頁面上呈現的資料還是舊的。

  • updated :由于資料更改導緻的虛拟 DOM 重新渲染和打更新檔,在這之後會調用該鈎子。當這個鈎子被調用時,元件 DOM 已經更新,是以你現在可以執行依賴于 DOM 的操作。

    頁面也完成了更新,此時,data資料是最新的,同時,頁面上呈現的資料也隻最新的。

  • beforeDestroy :執行個體銷毀之前調用。在這一步,執行個體仍然完全可用。

    當執行beforeDestroy的時候,元件即将被銷毀,但是還沒有真正開始銷毀,此時元件還是正常可用的;data、methods等資料或方法,依舊可以被正常通路

  • destroyed :vue 執行個體銷毀後調用。調用後,Vue 執行個體訓示的所有東西都會解綁定,所有的事件監聽器會被移除,所有的子執行個體也會被銷毀。

    元件已完成了銷毀,元件無法使用,data和methods都不可使用。