watch是Vue中用于監聽數據變化的一個功能。Vue通過watch屬性來定義一個對象,該對象中可以定義一些屬性來監聽數據的變化。當被監聽的數據發生變化時,watch會自動調用執行一個函數,這個函數就是我們事先定義好的回調函數。例如,我們可以使用watch監聽一個變量的變化,然后通過回調函數對這個變量進行相應的處理操作。
computed是Vue中用于計算屬性的一個功能。它可以通過在Vue組件中定義computed屬性來引用Vue實例的數據,然后計算出一個新的值來作為computed屬性的值。Vue會自動緩存計算過程中用到的數據,當數據不變時,會直接返回緩存的值,提高了程序的運行效率。例如,我們可以通過computed屬性計算出一個列表中所有商品的總價格,并在模板中引用它來顯示總價。
在Vue中,我們也可以使用watch來監聽computed屬性的變化。雖然computed屬性本身就是根據Vue的響應式系統計算得出的,但是有時我們可能需要根據computed屬性的變化來進行一些響應式的操作。使用watch來監聽computed屬性的變化可以幫助我們達到這個目的。
watch: { totalPrice: function(newValue, oldValue) { // 當computed屬性totalPrice發生變化時會調用這個函數 // newValue是新值,oldValue是舊值 // 在這里進行相應的響應式操作 } }, computed: { totalPrice: function() { // 計算所有商品的總價 let total = 0; this.items.forEach(function(item) { total += item.price * item.quantity; }); return total; } }
如上述代碼所示,在組件中我們通過watch屬性來監聽computed屬性totalPrice的變化,并定義了一個相應的回調函數來進行響應式操作。當totalPrice變化時,watch會自動調用這個函數進行處理。
需要注意的是,在Vue中,如果某個數據由多個computed屬性共同計算得出,那么當其中一個computed屬性變化時,其他computed屬性也會跟著變化,而不需要我們手動去監聽它們的變化。例如,我們可以定義一個computed屬性來計算出訂單的總價和發貨日期,當訂單中的商品信息發生變化時,這兩個computed屬性也會相應地發生變化。
除了監聽computed屬性的變化以外,我們還可以使用watch來監聽Vue組件中其他數據的變化。watch的用法非常靈活,它可以監聽響應式數據的變化、異步操作的結果等等,非常適合在復雜的應用場景中使用。