watch
vm.$watch( exporfn, callback, [options] )
用法:
// 鍵路徑
vm.$watch('a.b.c', function (newval, oldval) )
// 函式
vm.$watch(
function () ,
function (newval, oldval)
)
沒有快取性,更多的是觀察的作用,可以監聽某些資料執行**,響應資料的變化。
觀察 vue 例項上的乙個表示式或者乙個函式計算結果的變化。**函式得到的引數為新值和舊值。表示式只接受簡單的鍵路徑。對於更複雜的表示式,用乙個函式取代。
當需要在資料變化時執行非同步或開銷較大的操作時,這個方式是最有用的。
當你有一些資料需要隨著其它資料變動而變動時,你很容易濫用watch
。通常更好的做法是使用計算屬性而不是命令式的watch
**。
在變更 (不是替換) 物件或陣列時,舊值將與新值相同,因為它們的引用指向同乙個物件/陣列。vue 不會保留變更之前值的副本。
屬性:
deep:true
當我們需要深度監聽物件中的屬性時,可以開啟deep:true選項(監聽陣列的變更不需要這麼做),這樣便會對物件中的每一項進行監聽。
vm.$watch('someobject', callback, )
vm.someobject.nestedvalue = 123
// callback is fired
這樣會帶來效能問題,優化的話可以使用字串形式監聽,如果寫到元件中,不要忘記使用unwatch手動登出。
vm.$watch
返回乙個取消觀察函式,用來停止觸發**:
var unwatch = vm.$watch('a', cb)
// 之後取消觀察
unwatch()
immediate
在選項引數中指定immediate: true
將立即以表示式的當前值觸發**:
vm.$watch('a', callback, )
// 立即以 `a` 的當前值觸發**
注意在帶有immediate
選項時,不能在第一次**時取消偵聽給定的 property。
// 這會導致報錯
var unwatch = vm.$watch(
'value',
function () ,
)
如果仍然希望在**內部呼叫乙個取消偵聽的函式,應該先檢查其函式的可用性:
var unwatch = vm.$watch(
'value',
function ()
},)
使用 watch 選項允許我們執行非同步操作 (訪問乙個 api),限制我們執行該操作的頻率,並在我們得到最終結果前,設定中間狀態。這些都是計算屬性無法做到的。 計算屬性和偵聽器
1 計算屬性快取 vs 方法 將乙個函式定義為計算屬性和方法得到的結果是相同的。但不同的是計算屬性是基於它們的依賴進行快取的,只是在相關依賴發生改變時才會重新求值。方法 methods 計算屬性 computed 2 計算屬性 vs 偵聽屬性 偵聽屬性 觀察和響應vue例項上的資料變動 watch ...
計算屬性和偵聽器
div id example p original message p p computed reversed message p div var vm new vue computed 結果 original message hello computed reversed message olle...
計算屬性和偵聽器
1,計算屬性 在 computed 屬性物件中定義計算屬性的方法 在頁面中使用 來顯示計算的結果 通過 getter setter 實現對屬性資料的顯示和監視 計算屬性存在快取,多次讀取只執行一次 getter 計算 通過在表示式中呼叫方法也可以達到同樣的效果 但是,不同的是計算屬性是基於它們的響應...