Vue Watch 偵聽器屬性

2022-06-08 16:57:12 字數 1751 閱讀 3910

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 計算 通過在表示式中呼叫方法也可以達到同樣的效果 但是,不同的是計算屬性是基於它們的響應...