一、計算屬性(computed)
Vue.js 的內聯表達式非常方便,但如果涉及到比較復雜的場景,我們應該使用計算屬性。
計算屬性是用來聲明式的描述一個值依賴了其它的值,當依賴的值發生改變時,其值才會相應的發生更改並更新相關的DOM。
其結果如下圖,當文本框中值發生更改時,計算屬性的值也發生相應的更改並觸發DOM更新。
值得注意的是計算屬性默認只有 getter ,不過自已可以根據需要提供一個setter。
此時我們可以點擊頁面button元素執行reversedMessage的set方法
文本框中輸入message,點擊set后得到的結果如下:
二、Methods && Methods vs computed
其實除了使用計算屬性外,我們利用methods同樣可以達到相同的效果。
此時得到的結果和使用計算屬性得到的結果是一樣的
其實在這個簡單的例子中,使用計算屬性與methods是區別並不明顯,但在一些比較復雜或是數據量比較大的,並存在一些依賴關系的時候,計算屬性的優勢就會突顯出來,此時使用計算屬性會大大提高我們的性能。
計算屬性:只要依賴的數據沒發生改變,我們就可以直接返回緩存里的數據,而不需要每次都重復執行數據操作。
Methods: 只要發生重新渲染,method 調用總會執行該函數。
鑒於兩者的區別,我們可以根據其需求和場景進行合理的選擇。
三、watch && Watched屬性 vs computed
watch用於觀察和響應Vue實例上的數據變動,與計算屬性相比,大部份情況下使用計算屬性可能會更好一些,但當你想要在數據變化響應時,執行異步操作或開銷較大的操作,這時使用watch將是更好的選擇。
此時如果textValue的值發生改變時,就會執行watch操作,如果我們需要對數據進行深度觀察時,可以使用deep屬性。
使用watch時代碼很容易理解,它指定監測的值是誰,然后相應的改變其他的值。