get
方法来获取值。计算属性的值会被缓存,只有相关依赖发生变化时,才会重新计算。<template>
<div>
<p>商品价格: {{ formattedPrice }}</p>
<p>商品数量: {{ quantity }}</p>
<p>总价: {{ totalPrice }}</p>
</div>
</template>
<script>
export default {
data() {
return {
price: 20, // 商品单价
quantity: 3 // 商品数量
};
},
computed: {
// 计算商品价格的计算属性
formattedPrice() {
return `$${this.price.toFixed(2)}`;
},
// 计算总价的计算属性
totalPrice() {
return this.price * this.quantity;
}
}
};
</script>
解析:
在Vue中,计算属性不仅可以使用 get()
方法来定义计算逻辑,还可以使用 set()
方法来定义当计算属性被赋值时触发的逻辑。完整的计算属性写法如下:
computed: {
// 计算属性名: 包含get()和set()方法的对象
computedProperty: {
get() {
// 计算逻辑(只读)
return result;
},
set(newValue) {
// 赋值逻辑
// ...
}
}
}
方法来定义当计算属性被赋值时触发的逻辑。完整的计算属性写法如下:
<body>
<div id="app">
姓:<input type="text" v-model="firstName"><br>
名:<input type="text" v-model="lastName"><br>
<p>姓名:{{ username }}</p>
<button @click="updateUserName('静静')">修改姓名</button>
</div>
<script src="./vue.js"></script>
<script>
const app = new Vue({
el: '#app',
data: {
firstName: '',
lastName: ''
},
computed: {
username: {
// 获取方法
get() {
return this.firstName + this.lastName
},
// 设置方法
set(value) {
if (value.trim() !== '') {
// 给姓赋值
this.firstName = value.slice(0, 1)
this.lastName = value.slice(1)
}
}
}
},
methods: {
// 修改
updateUserName(newUsername) {
this.username = newUsername;
}
}
})
</script>
</body>