在插值語法中可以達到數據間單的組合效果或是計算
但這樣會倒置html頁面的複雜性
並且沒有復用率
Vue設計一個配置
專門處理數據計算
Vue官網中也相對推薦使用此配置來做數據邏輯處理
定義:
要用的屬性並不存在, 必須通過已有屬性計算得來
原理:
底層借助 Object.defineproperty()提供的 getter/setter
get函數式:
<div id="root" >
<span>{{fullName}}</span><br/>
<span>{{fullName}}</span><br/>
<span>{{fullName}}</span><br/>
<span>{{fullName}}</span><br/>
<span>{{fullName}}</span><br/>
<span>{{fullName}}</span><br/>
</div>
<script>
var vm = new Vue({
el : "#root",
data : {
firstName : "Liu",
lastName : "yuchen"
},
computed : {
fullName : {
get(){
console.log( "fullName get()" )
return this.firstName.toUpperCase()
+ "_" + this.lastName.toLowerCase()
}
}
}
})
</script>
在頁面上呈現的效果為
頁面呈現的多筆數據中
原先可能要做6次的計算
但配置在compute中
直接將計算結果放入頁面, 計算次數也單單只有一次而已
compute的配置中, 各項數據都會預設配置一個get函數式
但出現需要配置參數的數行時, compute也可以搭配set函數式
<div id="root" >
<label>firstName : </label>
<input type="text" v-model="firstName" /><br/>
<label>lastName : </label>
<input type="text" v-model="lastName" /><br/>
<label>fullName : </label>
<input type="text" v-model="fullName" /><br/>
</div>
<script>
var vm = new Vue({
el : "#root",
data : {
firstName : "",
lastName : ""
},
computed : {
fullName : {
get(){
return this.firstName.toUpperCase()
+ "_" + this.lastName.toLowerCase()
},
set(value){
var str = value.split("_");
this.firstName = str[0];
this.lastName = str[1];
}
}
}
})
</script>
set的函數式在compute的設定上並不是必須
但get()是計算屬性的基礎, 計算屬性的取得是基於屬性描述器get()
<script>
var vm = new Vue({
el : "#root",
data : {
firstName : "Liu",
lastName : "yuchen"
},
computed : {
fullName(){
return this.firstName.toUpperCase() + "_" + this.lastName.toLowerCase()
}
}
})
</script>
以上就是對Vue的計算屬性做基本的介紹, 感謝閱讀