Vue中的watch參數是一個非常重要的選項,它允許我們監聽Vue實例中指定的數據或者表達式,并在其發生變化時觸發回調函數。這個參數通常會被用來處理異步操作,或者在數據變化時執行一些邏輯。
// 示例代碼 watch: { num: function(newValue, oldValue) { console.log('num變化了', newValue, oldValue) } }
在watch選項中,我們可以通過使用函數的方式來監聽數據變化。這個函數接收兩個參數:新值(newValue)和舊值(oldValue)。當我們只需要監聽數據變化,并不需要進行任何操作時,我們可以使用一個空函數作為回調函數。
// 示例代碼 watch: { num: function(){} }
除了可以監聽數據變化,我們也可以監聽表達式的變化。這個表達式可以是任意的,包括數學計算、方法調用等等。我們只需要將這個表達式作為watch選項的一個字符串即可。
// 示例代碼 watch: { 'num1 + num2': function(newValue, oldValue) {} }
在Vue中,watch選項也可以和computed選項進行協同工作。當我們需要觸發一個computed選項時,可以通過在watch中監聽相關值的變化來實現。
// 示例代碼 computed: { total: function() { return this.num1 + this.num2 } }, watch: { num1: function() { this.total = this.num1 + this.num2 }, num2: function() { this.total = this.num1 + this.num2 } }
除了上述基本用法之外,Vue的watch選項還有一些高級用法:
- 深度監聽:當我們需要監聽到對象或數組中某個具體值的變化時,可以通過設置deep選項來實現。
- 立即執行:在定義watch選項時,我們可以設置immediate選項為true,來使回調函數在監聽開始時立即執行一次。
- 停止監聽:我們可以使用$watch函數來注冊一個watcher,并將返回的watcher實例保留下來。這個watcher實例有一個unwatch函數,可以在不需要監聽時,通過調用這個函數來停止監聽。
// 示例代碼(深度監聽) watch: { 'user.info.age': { handler: function(newValue, oldValue) {}, deep: true } } // 示例代碼(立即執行) watch: { num: { handler: function(newValue, oldValue) {}, immediate: true } } // 示例代碼(停止監聽) created: function() { this.watcher = this.$watch('num', function() {}) }, methods: { stopWatch: function() { this.watcher.unwatch() } }
下一篇vue的上傳圖片