計(jì)算屬性控乾,偵聽屬性,方法娜遵,對于同一個(gè)需求蜕衡,可能三種方式都可以實(shí)現(xiàn),但是设拟,如果功能作用都一樣慨仿,那為什么還要出現(xiàn)三種呢久脯,細(xì)細(xì)考究,他們又又各自的職責(zé)镰吆,各司其職帘撰,會(huì)讓代碼更優(yōu)美
計(jì)算屬性與方法
比如實(shí)現(xiàn)一些購物價(jià)格總和
methods: {
getTotalMoney(){
let totalMoney = this.appleNum * thisapplePrice + this.bedNum*this.bedPrice
return?totalMoney?
}
},
computed: {
totalMoney: function() {
return? this.appleNum * thisapplePrice + this.bedNum*this.bedPrice
}
}
看著計(jì)算屬性和方法沒什么區(qū)別,實(shí)際上差別大了
計(jì)算屬性是基于他們的依賴進(jìn)行緩存的万皿,就是說摧找,這一次計(jì)算過了,如果里面的變量沒有發(fā)生任何改變的情況下牢硅,再次拿這個(gè)totalMoney顯示的時(shí)候蹬耘,不再重復(fù)計(jì)算,而方法是調(diào)用一次執(zhí)行一次减余,沒有緩存可以利用综苔,簡單的計(jì)算,兩種方式看不出來區(qū)別位岔,如果是比較復(fù)雜的休里,那有緩存和無緩存就不一樣了
計(jì)算屬性和偵聽屬性
他們有一個(gè)共同點(diǎn)就是,其中一個(gè)變量發(fā)生變化赃承,能引起一些變化妙黍,這也是導(dǎo)致watch和computed使用的時(shí)候會(huì)混用的原因
watch擅長處理的情景是一個(gè)變量影響多個(gè)變量
eg:
watch:{
num: function(newValue,oldValue){
// 由于watch變化,觸發(fā)執(zhí)行函數(shù)體內(nèi)的一些命令
}
}
computed刪除處理瞧剖,多個(gè)變量影響一個(gè)的拭嫁,并且同時(shí)是聲明式的
computed: {
fullName: function(){
return this.firstName+this.lastName
}
}
由于this.firstName或者this.lastName有變化,才會(huì)觸發(fā)fullname變化
這是兩者使用上的區(qū)別
大部分情況下使用computed比較多抓于,但是watch有自己無可替代的作用
數(shù)據(jù)變化時(shí)執(zhí)行異步或開銷較大的操作時(shí)優(yōu)先考慮watch
使用?watch?選項(xiàng)允許我們執(zhí)行異步操作 (訪問一個(gè) API)做粤,限制我們執(zhí)行該操作的頻率,并在我們得到最終結(jié)果前捉撮,設(shè)置中間狀態(tài)怕品。這些都是計(jì)算屬性無法做到的。
vue官網(wǎng)講的更詳細(xì)些
https://cn.vuejs.org/v2/guide/computed.html