用計算屬性來響應改變

data屬性不是響應式的,所以不能寫成
data:{counter:0, result:this.counter>5?Greate 5 : Small5 },而應該寫成
用計算屬性來響應改變
然後在html調用:
用計算屬性來響應改變
現在在增加按鈕和secondCounter時:
用計算屬性來響應改變
那麼這個result()方法會在每次更新頁面的時候都執行一次,Vue會在每次需要更新的時候更新一次頁面,比如則個secondCounder的狀態改變的時候,就需要更新頁面,Vue不知道result()函數是否執行了,也不知道result()函數是否用到改變了的屬性,所以Vue不知道secondCounter的變化是否會影響result()函數,所以它也重複執行了result()函數
在這種情況下,可以用一個新的全局Vue對象上的屬性,Computed(計算屬性)

點擊increase時,output和result都被執行了,因爲我改變了counter的屬性值,然後輸出了computed裏的依賴,counter的output屬性,依賴counter的屬性就被刷新了。即result()函數被執行了。
當我點擊increaseSecond,它只會增加secondCounter的值,
computed的output沒有用到這個屬性,如果我點擊increaseSecond,就只能看到綁定了的方法,computed不會被執行,
因爲Vue不會注意到其中的屬性是什麼,這裏只有computed的屬性,

着就是我們在點擊increaseSecond,按鈕時沒有看到Computed的原因,
這就是當我們處理依賴性屬性時,怎麼使用computed屬性的方法。

因爲Vue會緩存結果,所以只在需重寫計算屬性時,才重寫計算,所以只有當呢不需要緩存結果時,纔用到result()這種函數的形式,也就是你下每次DOM更新時,都重寫計算result,因爲又時候,可能情況就需要這樣。
比如,你更新的是不再調用的函數中的屬性。

總結:data中定義多個屬性counter1 ,conter2, conter3 ,counter4,通過4按鈕分別改變對應的counter值,methods中設置多個函數,result1調用counter1, result2調用counter2,result3調用counter3,在computed中設置方法output,output調用counter4。然後再P標籤中調用result1,result2,result3,output。點擊按鈕1,result1,result2,result3都會被執行,點擊按鈕2,按鈕3也一樣,但是點擊按鈕4時,result1,result2,result3,output都會被執行。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章