4 計算屬性和觀察者

2022-01-12 12:24:48 字數 2428 閱讀 8357

對於任何複雜邏輯,你都應當使用計算屬性。

1、基礎例子

original message: "}"

computed reversed message: "}"

var vm = new

vue(,

computed:

}})

可以像繫結普通屬性一樣在模板中繫結計算屬性。vue 知道vm.reversedmessage依賴於vm.message,因此當vm.message發生改變時,所有依賴vm.reversedmessage的繫結也會更新。而且最妙的是我們已經以宣告的方式建立了這種依賴關係:計算屬性的 getter 函式是沒有*** (side effect) 的。

2、計算屬性快取vs方法

我們可以通過在表示式中呼叫方法來達到同樣的效果:

reversed message: "}"

//在元件中

methods:

}

兩種方式的最終結果確實是完全相同的。然而,不同的是計算屬性是基於它們的依賴進行快取的。計算屬性只有在它的相關依賴發生改變時才會重新求值。這就意味著只要message還沒有發生改變,多次訪問reversedmessage計算屬性會立即返回之前的計算結果,而不必再次執行函式。

我們為什麼需要快取?假設我們有乙個效能開銷比較大的的計算屬性 a,它需要遍歷乙個巨大的陣列並做大量的計算。然後我們可能有其他的計算屬性依賴於 a 。如果沒有快取,我們將不可避免的多次執行 a 的 getter!如果你不希望有快取,請用方法來替代。

3、計算屬性vs偵聽屬性

vue 提供了一種更通用的方式來觀察和響應 vue 例項上的資料變動:偵聽屬性。當你有一些資料需要隨著其它資料變動而變動時,你很容易濫用watch——特別是如果你之前使用過 angularjs。然而,通常更好的做法是使用計算屬性而不是命令式的watch**。

}

//偵聽屬性

var vm = new

vue(,

watch: ,

lastname:

function

(val)

}})//計算屬性

var vm = new

vue(,

computed:

}})

4、計算屬性的setter

計算屬性預設只有 getter ,不過在需要時你也可以提供乙個 setter :

//

...computed: ,

//setter

set: function

(newvalue)

}}//...

當需要在資料變化時執行非同步或開銷較大的操作時,vue 通過watch選項提供了乙個更通用的方法,來響應資料的變化。

<

div

id="watch-example"

>

<

p>

ask a yes/no question:

<

input

v-model

="question"

>

p>

<

p>}

p>

div>

<

script

src=""

>

script

>

<

script

src=""

>

script

>

<

script

>

varwatchexamplevm

=new

vue(,

watch:

},methods:

this

.answer ='

thinking...

'var

vm =

this

axios.get(

'').then(

function

(response) )

.catch

(function

(error) )

},//這是我們為判定使用者停止輸入等待的毫秒數

500)

}})script

>

在這個示例中,使用watch選項允許我們執行非同步操作 (訪問乙個 api),限制我們執行該操作的頻率,並在我們得到最終結果前,設定中間狀態。這些都是計算屬性無法做到的。

除了watch選項之外,您還可以使用命令式的 vm.$watch api。

swift學習記錄(計算屬性和屬性觀察者)

計算屬性不直接儲存值,而是提供乙個 getter 和乙個可選的 setter,來間接獲取和設定其他屬性或變數的值。基本語法 class struct enum 型別名 set 新屬性值 示例 class rect set newy var area int var rect rect rect.y ...

Swift 屬性觀察者 備

為了監聽屬性的變化,swift提供了屬性觀察者。屬性觀察者能夠監聽儲存屬性的變化,即便變化前後的值相同,它們也能監聽到。屬性觀察者主要有以下兩個 屬性觀察者的語法格式如下 物件導向型別 型別名 didset 舊值 屬性觀察者的語法格式比計算屬性要混亂。屬性觀察者可以在類和結構體中使用,不能在列舉中使...

python觀察者模式 python 觀察者模式

python 觀察者模式 前言e 寫的倉促就不截uml類圖了,書本chapter10,p313能看到圖 一旦觀察的主題有更新,就會通知到觀察者們,下面的例子是最簡單的乙個觀察者範例,假設這是一群投機分子密切關注 軍 火 倉庫的產品與數量變動 class inventory def init self...