對於任何複雜邏輯,你都應當使用計算屬性。
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...