1. 程式人生 > 實用技巧 >watch監聽資料變化詳解

watch監聽資料變化詳解

一、使用

watch: {
    mydata(val, newval) {
        console.log(val)
        console.log(newval)
    }
  }

二、屬性詳解

  • immediate

  • handler

  • deep

(1)immediate和handler

watch特點:當值第一次繫結時,不會執行監聽函式,只有值發生改變時才會執行。

如果需要在最初繫結值的時候也執行函式,則需要用帶immediate屬性。

eg:

watch: {
     myData: {
        handler(newVal) {
            this.change_number++
        },
        immediate: true
     }
}

(2)deep

當需要監聽一個物件的改變時,普通的watch方法無法監聽到物件內部屬性的改變,此時就需要deep屬性對物件進行深度監聽。

eg:

data() {
    return {
        myData: {
            'id': 1,
            'text': 'abc'
        }
    }
},
watch: {
     myData: {
        handler(newVal) {
            this.change_number++
        },
        deep: true
    }   
}

設定deep:true則可以監聽到mydata.id的變化,此時會給mydata的所有屬性都加上這個監聽器,

當物件屬性較多時,每個屬性值的變化都會執行handler,如果只需要監聽物件中的一個屬性值,則可以做一下優化“使用字串的形式監聽物件屬性:

eg:

data() {
    return {
        docData: {
            'doc_id': 1,
            'tpl_data': 'abc'
        }
    }
},
watch: {
    'docData.doc_id': {
        handler(newVal, oldVal) {
            ......
        },
        deep: true
    }   
}

這樣只會給物件的某個特定的屬性加監聽器

三、總結

陣列(一維、多維)的變化不需要通過深度監聽,物件陣列中物件的屬性變化則需要deep深度監聽。