Vue.js的watch函數是用來監控vue實例中data中定義的響應式數據的。
export default { data() { return { value: '初始值' } }, watch: { value(newValue, oldValue) { console.log(`新值: ${newValue},舊值: ${oldValue}`); } } };
在上面的代碼中,我們定義了一個Vue組件,在組件內部定義了一個data數據value。在watch函數中,我們監聽了value數據的變化。當value的值發生變化時,watch函數就會被調用,并且會傳入參數newValue和oldValue,分別代表數據變化之后的值和變化之前的值。
除了以上提到的兩個參數外,watch方法還可以接受一個可選的選項對象,如下:
export default { data() { return { value: '初始值' } }, watch: { value: { handler(newValue, oldValue) { console.log(`新值: ${newValue},舊值: ${oldValue}`); }, immediate: true, // 立即執行handler函數 deep: true // 深度watch,監聽子屬性的變化 } } };
上面的代碼中,我們給watch函數傳入了一個選項對象,其中handler是必須的,和之前一樣,代表數據變化時的回調函數。除此之外,我們還傳入了兩個可選參數:immediate和deep。
當我們設置immediate為true時,Vue會在組件創建之后立即執行handler函數,一般用于在頁面加載時需要對數據進行一次處理。
當我們設置deep為true時,watch會對數據進行深度監聽,當內部屬性發生變化時,也會觸發handler函數。
除了上述的參數之外,我們還可以使用watch函數的返回值,對監控進行更細粒度的控制:
export default { data() { return { value: '初始值', deepData: { name: '張三' } } }, watch: { value: function(newValue) { console.log(`新值: ${newValue}`); return '監控成功'; }, deepData: { handler(newValue, oldValue) { console.log(`新值: ${JSON.stringify(newValue)},舊值: ${JSON.stringify(oldValue)}`); }, immediate: true, deep: true } } };
上面的代碼中,我們對value數據進行了監控,并在handler函數中返回了一個字符串“監控成功”。在實際的組件中,我們可以根據handler函數的返回值來做一些邏輯判斷。
通過上面的介紹,我們可以看出,Vue的watch函數非常強大,并且可以通過參數的不同來做到細粒度的控制。在實際開發中,我們可以根據自己的業務需求來靈活使用watch函數。
上一篇vue 安卓最低