一般情況下,為了避免在 template 中寫入過度複雜的計算,可以選擇放到 computed 。
<template>
<div v-text="colorList.join(',')" />
</template>
<script>
export default {
data() {
return {
colorList: ['blue', 'green', 'red'],
};
},
};
</script>
// Recommend
<template>
<div v-text="displayColorList" />
</template>
<script>
export default {
data() {
return {
colorList: ['blue', 'green', 'red'],
};
},
computed: {
displayColorList() {
return this.colorList.join(',');
},
},
};
</script>
預設的情況下computed只有 get() ,必須要有一個return值,會根據相依的值動態計算。computed跟data很像,但如果要直接修改值,必須加上 set() 。如果firstName、lastName被修改時,會觸發 set() ,第一個參數為這次觸發更新輸入的值。參考範例:
<template>
<div>
<input v-model="firstName">
<input v-model="lastName">
<input v-text="fullName" />
</div>
</template>
<script>
export default {
data() {
return {
fullName: '',
};
},
computed: {
firstName: {
get() {
return this.fullName.split(' ')[0] || '';
},
set(firstName) {
this.fullName = `${firstName} ${this.lastName}`;
},
},
lastName: {
get() {
return this.fullName.split(' ')[1] || '';
},
set(lastName) {
this.fullName = `${this.firstName} ${lastName}`;
},
},
},
};
</script>
沒有留言:
張貼留言