2017/09/14 VUE 計算屬性與觀察者

一. 計算屬性

<p> {{ message.split(' ') . reverse( ) . join(' ') }} </p>

對于任何復(fù)雜邏輯,我們都應(yīng)該使用計算屬性


注:這里我們聲明了一個計算屬性reversedMessage熙尉。我們提供的函數(shù)將用作屬性vm.reversedMessage的 getter 函數(shù)

在瀏覽器的控制臺中改變vm.message的值,相應(yīng)的vm.reversedMessage的返回值就會改變

你可以像綁定普通屬性一樣在模板中綁定計算屬性。Vue 知道vm.reversedMessage依賴于vm.message搓扯,因此當vm.message發(fā)生改變時检痰,所有依賴于vm.reversedMessage的綁定也會更新。而且最妙的是我們已經(jīng)以聲明的方式創(chuàng)建了這種依賴關(guān)系:計算屬性的 getter 函數(shù)是沒有連帶影響 (side effect)锨推,這使得它易于測試和推理铅歼。



二. 計算屬性的緩存VS方法

我們也可以在表達式中調(diào)用方法來達到同樣的效果


重點:? 我們可以將同一函數(shù)定義為一個方法而不是一個計算屬性。對于最終的結(jié)果换可,兩種方式確實是相同的椎椰。然而,不同的是計算屬性是基于它們的依賴進行緩存的沾鳄。計算屬性只有在它的相關(guān)依賴發(fā)生改變時才會重新求值慨飘。這就意味著只要message還沒有發(fā)生改變,多次訪問reversedMessage計算屬性會立即返回之前的計算結(jié)果译荞,而不必再次執(zhí)行函數(shù)瓤的。


我們?yōu)槭裁葱枰彺嫘萜考僭O(shè)我們有一個性能開銷比較大的的計算屬性A,它需要遍歷一個極大的數(shù)組和做大量的計算圈膏。然后我們可能有其他的計算屬性依賴于A塔猾。如果沒有緩存,我們將不可避免的多次執(zhí)行A的 getter稽坤!如果你不希望有緩存桥帆,請用方法來替代。


三. ?計算屬性 VS 被觀察的屬性

Vue 確實提供了一種更通用的方式來觀察和響應(yīng) Vue 實例上的數(shù)據(jù)變動:watch 屬性慎皱。當你有一些數(shù)據(jù)需要隨著其它數(shù)據(jù)變動而變動時,你很容易濫用watch——特別是如果你之前使用過 AngularJS叶骨。然而茫多,通常更好的想法是使用計算屬性而不是命令式的watch回調(diào)。細想一下這個例子:


將它與計算屬性的方法進行比較,發(fā)現(xiàn),計算屬性的方法簡便很多


四. 計算屬性的setter

計算屬性中默認只有g(shù)etter方法,不過需要時也可以添加setter方法


五. 觀察者

雖然計算屬性在大多數(shù)情況下更合適忽刽,但有時也需要一個自定義的 watcher天揖。這是為什么 Vue 通過watch選項提供一個更通用的方法,來響應(yīng)數(shù)據(jù)的變化跪帝。當你想要在數(shù)據(jù)變化響應(yīng)時今膊,執(zhí)行異步操作或開銷較大的操作,這是很有用的伞剑。



在這個示例中斑唬,使用watch選項允許我們執(zhí)行異步操作 (訪問一個 API),限制我們執(zhí)行該操作的頻率黎泣,并在我們得到最終結(jié)果前恕刘,設(shè)置中間狀態(tài)。這是計算屬性無法做到的抒倚。

除了watch選項之外褐着,您還可以使用vm.$watch API命令。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末托呕,一起剝皮案震驚了整個濱河市含蓉,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌项郊,老刑警劉巖馅扣,帶你破解...
    沈念sama閱讀 221,888評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異呆抑,居然都是意外死亡岂嗓,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,677評論 3 399
  • 文/潘曉璐 我一進店門鹊碍,熙熙樓的掌柜王于貴愁眉苦臉地迎上來厌殉,“玉大人食绿,你說我怎么就攤上這事」保” “怎么了器紧?”我有些...
    開封第一講書人閱讀 168,386評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長楼眷。 經(jīng)常有香客問我铲汪,道長,這世上最難降的妖魔是什么罐柳? 我笑而不...
    開封第一講書人閱讀 59,726評論 1 297
  • 正文 為了忘掉前任掌腰,我火速辦了婚禮,結(jié)果婚禮上张吉,老公的妹妹穿的比我還像新娘齿梁。我一直安慰自己,他們只是感情好肮蛹,可當我...
    茶點故事閱讀 68,729評論 6 397
  • 文/花漫 我一把揭開白布勺择。 她就那樣靜靜地躺著,像睡著了一般伦忠。 火紅的嫁衣襯著肌膚如雪省核。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,337評論 1 310
  • 那天昆码,我揣著相機與錄音气忠,去河邊找鬼。 笑死赋咽,一個胖子當著我的面吹牛笔刹,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播冬耿,決...
    沈念sama閱讀 40,902評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼舌菜,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了亦镶?” 一聲冷哼從身側(cè)響起日月,我...
    開封第一講書人閱讀 39,807評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎缤骨,沒想到半個月后爱咬,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,349評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡绊起,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,439評論 3 340
  • 正文 我和宋清朗相戀三年精拟,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,567評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡蜂绎,死狀恐怖栅表,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情师枣,我是刑警寧澤怪瓶,帶...
    沈念sama閱讀 36,242評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站践美,受9級特大地震影響洗贰,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜陨倡,卻給世界環(huán)境...
    茶點故事閱讀 41,933評論 3 334
  • 文/蒙蒙 一敛滋、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧兴革,春花似錦矛缨、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,420評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽灵妨。三九已至解阅,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間泌霍,已是汗流浹背货抄。 一陣腳步聲響...
    開封第一講書人閱讀 33,531評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留朱转,地道東北人蟹地。 一個月前我還...
    沈念sama閱讀 48,995評論 3 377
  • 正文 我出身青樓,卻偏偏與公主長得像藤为,于是被迫代替她去往敵國和親怪与。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,585評論 2 359

推薦閱讀更多精彩內(nèi)容

  • 這篇筆記主要包含 Vue 2 不同于 Vue 1 或者特有的內(nèi)容缅疟,還有我對于 Vue 1.0 印象不深的內(nèi)容分别。關(guān)于...
    云之外閱讀 5,052評論 0 29
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理碰辅,服務(wù)發(fā)現(xiàn)核芽,斷路器,智...
    卡卡羅2017閱讀 134,702評論 18 139
  • 1.安裝 可以簡單地在頁面引入Vue.js作為獨立版本枢赔,Vue即被注冊為全局變量桅咆,可以在頁面使用了括授。 如果希望搭建...
    Awey閱讀 11,034評論 4 129
  • Vue 實例 屬性和方法 每個 Vue 實例都會代理其 data 對象里所有的屬性:var data = { a:...
    云之外閱讀 2,221評論 0 6
  • 有了正官莊,天天好身體,熬夜寫作業(yè)也不怕啦荚虚!
    張巨星520閱讀 196評論 0 0