Vue Watch Computed

/** 計算屬性:computed;
  * 當數據的依賴項發生改變時,重新計算;
  */
data(){
    return {
        firstName: 'Li',
        lastName : 'Ys',
    }
}

computed:{
    //簡單版本
    fullName:function(){
        this.firstName + lastName;
    }
    //升級版本
    fullName:{
        get(){
            return this.firstName + ' ' + this.lastName
        },
        set(val){    //監視當前屬性值的變化,當屬性值發生變化時執行,更新相關的屬性數據
            //val就是fullName的最新屬性值
            const names = val.split(' ');
            this.firstName = names[0];
            this.lastName = names[1];
        }
    }
}

/**
  * 監聽屬性:watch;
  * 監聽data或prop中數據本身;
  */
data(){
    return {
        name:'Li',
        person:{
            name:'Li',
            age:15,
        }
    }
}

watch:{
    //簡單版本
    name:function(val){
        console.log(val);
    }
	
    //升級版
    person:{
        //newVal和oldVal引用的是同一個對象
        handler:function(newVal, oldVal){
            console.log(newVal.name);
        },
        deep:true,
    }
}


computed 方法調用 的比較:

  •  方法調用通常用於完成 某一業務流程;
  •  computed可以將某個複雜的計算過程從 template中抽離出來;
  •  調用普通方法,每次都會重新計算,但computed是基於響應式依賴進行緩存的,可以理解爲 只有依賴項發生改變時,纔會重 新計算,並把結果進行緩存;

 

注意:

    不應該使用箭頭函數來定義 watcher 函數,因爲箭頭函數沒有 this,它的 this 會繼承它的父級函數,
    但是它的父級函數是 window,導致箭頭函數的 this 指向 window,而不是 Vue 實例。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章