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深度監聽。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM