Vue 中的computed和watch
场景:假设我们有一个简单的购物车应用,需要计算购物车中商品的总价。
在这个例子中:
- 使用
v-model
指令绑定了两个输入字段,一个是"数量"(quantity),另一个是"单价"(unitPrice)。 - 我们定义了一个
computed
属性totalAmount
,用于计算购物车的总价,它依赖于quantity
和unitPrice
这两个数据属性。当quantity
或unitPrice
变化时,totalAmount
会自动重新计算。 - 我们还使用
watch
来监视quantity
的变化。当quantity
变化时,会触发watch
中的函数,这里我们简单地打印出了变化的信息。
这个例子中,computed
用于派生数据,计算购物车的总价,而watch
用于在quantity
变化时执行自定义操作。这样就展示了它们的不同用途。
html
<!DOCTYPE html>
<html>
<head>
<title>Vue.js Shopping Cart</title>
<script src="https://cdn.jsdelivr.net/npm/vue@2.6.14/dist/vue.js"></script>
</head>
<body>
<div id="app">
<input v-model="quantity" type="number" placeholder="数量">
<input v-model="unitPrice" type="number" placeholder="单价">
<p>总价: {{ totalAmount }}</p>
</div>
<script>
var app = new Vue({
el: '#app',
data: {
quantity: 0,
unitPrice: 0
},
computed: {
totalAmount: function() {
return this.quantity * this.unitPrice;
}
},
watch: {
quantity: function(newQuantity, oldQuantity) {
console.log('Quantity changed from ' + oldQuantity + ' to ' + newQuantity);
// 在这里你可以执行任何自定义操作,比如发送购物车数量变化的日志或向服务器发起请求。
}
}
});
</script>
</body>
</html>