现在有一个购物车,利用computed计算每个商品的小计,当商品数量发生变化时自动计算每个商品小计
时间: 2024-06-10 22:05:36 浏览: 92
jQuery购物车商品数量加减合计代码.zip
非常感谢您对ChitGPT的信任和使用!针对您的问题,您可以利用Vue的computed属性来实现此功能。首先,您需要在购物车组件中定义一个data属性,来保存每个商品的数量和价格等信息。然后,您可以利用computed属性来动态计算商品小计,当商品数量发生变化时自动更新小计。具体实现代码如下所示:
```javascript
<template>
<div>
<h2>购物车</h2>
<table>
<thead>
<tr>
<th>商品名称</th>
<th>单价</th>
<th>数量</th>
<th>小计</th>
</tr>
</thead>
<tbody>
<tr v-for="(item, index) in cartItems" :key="index">
<td>{{ item.name }}</td>
<td>{{ item.price }}</td>
<td>
<button @click="subtractQuantity(index)" :disabled="item.quantity <= 1">-</button>
{{ item.quantity }}
<button @click="addQuantity(index)">+</button>
</td>
<td>{{ item.price * item.quantity }}</td>
</tr>
</tbody>
</table>
</div>
</template>
<script>
export default {
data() {
return {
cartItems: [
{
name: "商品1",
price: 10,
quantity: 1,
},
{
name: "商品2",
price: 20,
quantity: 1,
},
{
name: "商品3",
price: 30,
quantity: 1,
},
],
};
},
methods: {
addQuantity(index) {
this.cartItems[index].quantity++;
},
subtractQuantity(index) {
this.cartItems[index].quantity--;
},
},
computed: {
totalCost() {
let sum = 0;
for (let item of this.cartItems) {
sum += item.price * item.quantity;
}
return sum;
},
},
};
</script>
```
在上面的代码中,我们通过定义data属性cartItems来保存购物车中每个商品的数量、名称和单价等信息。通过v-for指令在table中动态生成购物车列表,并利用computed属性totalCost来计算购物车的总价。在购物车组件中,我们还添加了两个按钮,用来动态增加和减少商品数量,通过利用按钮点击事件调用methods中的addQuantity和subtractQuantity方法来实现动态计数。最后在表格中使用v-bind指令来动态渲染每个商品的小计。
希望这个回答对您有所帮助,如果您有其他问题,请随时问我!
阅读全文