1 computed屬性的實現原理
- Vue實例初始化時,給data的每一個屬性(dataKey)都添加getter和setter方法
- 計算屬性computed初始化時,提供的函數將做爲對應屬性(computedKey)的getter方法
其中,
computedKey: function(){
return this.dataKey+'change'
}
- 當首次獲取計算屬性的值是,dep開始收集依賴,即收集到dataKey和computedKey的依賴關係
- 在dataKey變化時,此時會調用dataKey的getter方法,經過dep收集的依賴,能夠斷定出data與computed對應數據的依賴關係
- 此時能夠作到,在data發生變化時,computed屬性數據也發生變化
2.computed屬性的用法
目的:爲了不模板中加入太多的計算公式,不夠精煉明瞭
簡單用法:html
<div id="example">
<p>Original message: "{{ message }}"</p>
<p>Computed reversed message: "{{ reversedMessage }}"</p>
</div>
var vm = new Vue({
el: '#example',
data: {
message: 'Hello'
},
computed: {
// 計算屬性的 getter
reversedMessage: function () {
// `this` 指向 vm 實例
return this.message.split('').reverse().join('')
}
}
})
在模板文件中,只須要寫reversedMessage便可,它與message是有依賴關係的。vue
3.computed屬性與watch的區別
- 當須要數據在異步變化或者開銷較大時,執行更新,使用watch會更好一些;而computed不能進行異步操做;
- computed能夠用緩存中拿數據,而watch是每次都要運行函數計算,無論變量的值是否發生變化,而computed在值沒有發生變化時,能夠直接讀取上次的值
4.computed屬性與methods的區別
- 在模板文件中,computed屬性只須要寫{{reverseMessage}},而methods須要寫成{{reverseMessage()}},最明顯的區別就是methods是方法,須要執行;
- computed屬性只有在依賴的data放生變化時,纔會從新執行,不然會使用緩存中的值,而methods是每次進入頁面都要執行的,有些須要每次進入頁面都執行的方法,須要使用methods,而computed屬性比較節約。
參考文獻
原理:https://segmentfault.com/a/11...
用法:https://cn.vuejs.org/v2/guide...segmentfault