一洞坑、起因缠局?
雖然在模板中綁定表達(dá)式是非常便利的,但是它們實(shí)際上只用于簡單的操作妈拌。在模板中放入太多的邏輯會讓模板過重且難以維護(hù)拥坛。比如:
<div id="example"> {{ message.split('').reverse().join('') }} </div>
這樣,模板不再簡單和清晰尘分。在實(shí)現(xiàn)反向顯示 message 之前猜惋,你應(yīng)該通過一個(gè)函數(shù)確認(rèn)它。所以培愁,Vue.js提供了計(jì)算屬性來讓我們?nèi)ヌ幚韺?shí)例中的復(fù)雜邏輯著摔。
計(jì)算屬性 (computed properties) 就是不存在于原始數(shù)據(jù)中,而是在運(yùn)行時(shí)實(shí)時(shí)計(jì)算出來的屬性定续。
案例如下:
在上面的案例中谍咆,計(jì)算屬性fullname 和 reverse 的值始終取決于firstname 和 lastname。計(jì)算屬性默認(rèn)只有 getter 私股,當(dāng)然在需要時(shí)我們也可以提供一個(gè) setter 摹察。計(jì)算屬性被設(shè)計(jì)出來的目的在于:getter 是干凈無副作用的。
二庇茫、計(jì)算屬性 和 Methods的區(qū)別?
當(dāng)頁面重新渲染(不是刷新)的時(shí)候螃成,計(jì)算屬性不會變化旦签,直接讀取緩存使用,適合較大量的計(jì)算和改變頻率較低的屬性寸宏;而method宁炫,就是當(dāng)頁面重新渲染的時(shí)候(頁面元素的data變化,頁面就會重新渲染)氮凝,都會重新調(diào)用method羔巢。
如果不希望有緩存,我們可以用method取代computed罩阵。
疑惑:為什么需要緩存竿秆?
假設(shè)我們有一個(gè)重要的計(jì)算屬性 A ,這個(gè)計(jì)算屬性需要一個(gè)巨大的數(shù)組遍歷和做大量的計(jì)算稿壁。然后我們可能有其他的計(jì)算屬性依賴于 A 幽钢。如果沒有緩存,我們將不可避免的多次執(zhí)行 A 的 getter 傅是!
三匪燕、計(jì)算屬性的setter方法
計(jì)算屬性默認(rèn)只有 getter 蕾羊,不過在需要時(shí)你也可以提供一個(gè) setter :
運(yùn)行結(jié)果: