Vue中計(jì)算屬性computed的示例解讀
計(jì)算屬性
表達(dá)式是非常便利的,但是它們實(shí)際上只用于簡(jiǎn)單的運(yùn)算。在模板中放入太多的邏輯會(huì)讓模板過(guò)重且難以維護(hù),所以引入了計(jì)算屬性computed,將復(fù)雜的邏輯放入計(jì)算中進(jìn)行處理,同時(shí)computed有緩存功能,防止復(fù)雜計(jì)算邏輯多次調(diào)用引起的性能問(wèn)題。
computed原理
computed的屬性reversedMessage在data中會(huì)有一個(gè)對(duì)我們不可見(jiàn)的cacheReversedMessage屬性對(duì)應(yīng)
cacheReversedMessage的值是根據(jù)其綁定的data中的message來(lái)決定的 獲取reversedMessage會(huì)返回
cacheReversedMessage的值 message更新之后會(huì)立馬調(diào)用reversedMessage的get方法去給cacheReversedMessage賦值(無(wú)論reversedMessage在dom中是否使用) cacheReversedMessage的值發(fā)生變化時(shí),相應(yīng)的dom也會(huì)發(fā)生變化
注意:computed中的屬性和data中的屬性名字不能相同,一個(gè)屬性要么在data里;要么在computed里,computed里的屬性要跟data中的配合使用,當(dāng)data屬性發(fā)生變化時(shí)才會(huì)調(diào)用get方法更新reversedMessage的值,否則get方法即使返回一個(gè)隨機(jī)數(shù),reversedMessage的值也不會(huì)變。
示例代碼
computed相當(dāng)于屬性的一個(gè)實(shí)時(shí)計(jì)算,如果實(shí)時(shí)計(jì)算里關(guān)聯(lián)了對(duì)象,那么當(dāng)對(duì)象的某個(gè)值改變的時(shí)候,同事會(huì)出發(fā)實(shí)時(shí)計(jì)算。
比如:
<body id="content">
<parent :childrens="childrens"></parent>
</body>
<!-- 這個(gè)測(cè)試主要想證明: 對(duì)于計(jì)算屬性里如果關(guān)聯(lián)對(duì)象,即使對(duì)象不是組件作用域內(nèi)的,當(dāng)對(duì)象在外部改變了某個(gè)屬性,同樣會(huì)出發(fā)計(jì)算屬性的方法-->
<script>
var parent = Vue.extend( {
props: {
childrens: ''
},
template: '<div >{{age}}</div>',
data: function() {
return {
name: '',
age: 18
};
},
computed: {
age: function() {
return this.childrens.age +10;
}
},
created: function() {
var _parent = this.$parent;
this._set = {};
this._set = _parent;
}
} );
var vm = new Vue( {
el: 'body',
data: {
childrens: {
name: '小強(qiáng)',
age: 20,
sex: '男'
}
},
components: {
'parent': parent
}
} );
vm.$data.childrens.age = 10;
</script>
當(dāng)vm.$data.childrens.age這個(gè)值改變的時(shí)候,動(dòng)態(tài)觸發(fā)computed里的age屬性計(jì)算,最后顯示到頁(yè)面的結(jié)果是:20。
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來(lái)一定的幫助,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)腳本之家的支持。
相關(guān)文章
vue-cli?npm如何解決vue項(xiàng)目中缺失core-js的問(wèn)題
這篇文章主要介紹了vue-cli?npm如何解決vue項(xiàng)目中缺失core-js的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-08-08
vue3如何實(shí)現(xiàn)PDF文件在線預(yù)覽功能
PDF文件在線預(yù)覽的功能相信大家都是有遇到過(guò)的,下面這篇文章主要給大家介紹了關(guān)于vue3如何實(shí)現(xiàn)PDF文件在線預(yù)覽功能的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-06-06
vue2中如何更改el-dialog出場(chǎng)動(dòng)畫(huà)(el-dialog彈窗組件)
el-dialog是一個(gè)十分好用的彈窗組件,但是出場(chǎng)動(dòng)畫(huà)比較單調(diào),于是決定自定義一個(gè)出場(chǎng)動(dòng)畫(huà),本文通過(guò)實(shí)例代碼圖文相結(jié)合給大家敘述下實(shí)現(xiàn)思路,感興趣的朋友一起看看吧2022-06-06
關(guān)于Vue源碼vm.$watch()內(nèi)部原理詳解
這篇文章主要介紹了關(guān)于Vue源碼vm.$watch()內(nèi)部原理詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04
詳解vue-router 2.0 常用基礎(chǔ)知識(shí)點(diǎn)之router-link
這篇文章主要介紹了詳解vue-router 2.0 常用基礎(chǔ)知識(shí)點(diǎn)之router-link,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-05-05

