-
Observer(觀察者):
Observer
用于將一個普通的JavaScript對象轉換為響應式對象。它遞歸地遍歷對象的所有屬性并使用Object.defineProperty
將它們轉換為getter和setter。這樣,在屬性被獲取或修改時,就能夠觸發相應的操作。 -
Dep(依賴):
Dep
是一個依賴管理器,用于管理多個Watcher
實例。在Vue的響應式系統中,每個響應式對象都有一個對應的Dep
實例。當屬性被訪問時,會將依賴收集到該屬性對應的Dep
實例中,而當屬性被修改時,會通知該屬性對應的Dep
實例,然后Dep
實例會通知所有依賴的Watcher
更新視圖。 -
Watcher(觀察者):
Watcher
用于觀察響應式對象的變化,并執行相應的回調函數。在Vue中,我們可以使用watch
選項或$watch
方法創建一個Watcher
實例,用于監聽某個屬性的變化。當屬性發生變化時,Watcher
會接收到通知,并執行相應的回調函數。
下面是一個簡單的例子,展示了如何在Vue中使用Watch
:
new Vue({data() {return {message: 'Hello, Vue!'};},watch: {message(newVal, oldVal) {console.log(`message的值從 ${oldVal} 變為 ${newVal}`);}}
});
在上述代碼中,我們定義了一個watch
選項,它包含一個message
屬性的監聽器函數。當message
屬性發生變化時,監聽器函數會被調用,接收到新值和舊值作為參數。
你也可以使用$watch
方法來創建一個Watcher
實例:
const vm = new Vue({data() {return {message: 'Hello, Vue!'};}
});
?
vm.$watch('message', (newVal, oldVal) => {console.log(`message的值從 ${oldVal} 變為 ${newVal}`);
});
通過$watch
方法創建的Watcher
實例可以手動銷毀,使用unwatch
方法:
const unwatch = vm.$watch('message', (newVal, oldVal) => {console.log(`message的值從 ${oldVal} 變為 ${newVal}`);
});
?
// 手動銷毀Watcher
unwatch();
希望以上解釋對你有所幫助!