1.定义一个数组,数组中包含产品的名称、单价和购买数量,使用methods(方法)computed(计算属性)和watch(侦听器)这3者中最优的方式计算购物车中产品的总价格;然后修改产品的购买数量,并重新计算其总价格。
时间: 2024-03-15 15:43:59 浏览: 189
通过名称案例,实现数据监听,同时介绍vue中computed,methods,watch三种方法的区别
好的,我可以帮你解答这个问题。
首先,我们可以定义一个数组来包含产品的名称、单价和购买数量,如下所示:
```javascript
let products = [
{ name: 'Product A', price: 10, quantity: 2 },
{ name: 'Product B', price: 5, quantity: 3 },
{ name: 'Product C', price: 8, quantity: 1 }
];
```
接下来,我们可以使用计算属性来计算购物车中产品的总价格,代码如下:
```javascript
computed: {
totalPrice() {
return this.products.reduce((total, product) => {
return total + product.price * product.quantity;
}, 0);
}
}
```
在上面的代码中,我们使用了数组的 `reduce` 方法来计算总价格。
最后,我们可以使用侦听器来监听购买数量的变化,并重新计算总价格,代码如下:
```javascript
watch: {
'products': {
handler: function() {
this.totalPrice = this.products.reduce((total, product) => {
return total + product.price * product.quantity;
}, 0);
},
deep: true
}
}
```
在上面的代码中,我们使用了侦听器来监听 `products` 数组的变化,并在数组发生变化时重新计算总价格。
整个示例代码如下所示:
```javascript
<template>
<div>
<ul>
<li v-for="(product, index) in products" :key="index">
{{ product.name }} - {{ product.price }} - {{ product.quantity }}
<button @click="product.quantity++">+</button>
<button @click="product.quantity--">-</button>
</li>
</ul>
<div>Total Price: {{ totalPrice }}</div>
</div>
</template>
<script>
export default {
data() {
return {
products: [
{ name: 'Product A', price: 10, quantity: 2 },
{ name: 'Product B', price: 5, quantity: 3 },
{ name: 'Product C', price: 8, quantity: 1 }
],
totalPrice: 0
};
},
mounted() {
this.totalPrice = this.products.reduce((total, product) => {
return total + product.price * product.quantity;
}, 0);
},
computed: {
totalPrice() {
return this.products.reduce((total, product) => {
return total + product.price * product.quantity;
}, 0);
}
},
watch: {
'products': {
handler: function() {
this.totalPrice = this.products.reduce((total, product) => {
return total + product.price * product.quantity;
}, 0);
},
deep: true
}
}
};
</script>
```
希望这个示例能够帮助你解决问题。如果你有任何疑问,可以随时向我提问。
阅读全文