一般情況下,為了避免在 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>
沒有留言:
張貼留言