如何在 Vue 中使用 v-for 更改数组中单个对象的输入值?

How to change input value for individual object in an array using v-for in Vue?

我正在制作购物车。我想根据数量显示每种产品的价格。 我做了按钮来增加或减少产品的数量。但是,所有产品的数量都会发生变化,因为它们都共享相同的数据。我该如何更改特定产品的数量?

    <div  v-for="(cartProduct,index) in cartProducts" :key="index" class="px-3 py-2">
        <div id="cartProducts">
            <p>{{cartProduct.description}}</p>
            <button @click="subtract" >-</button> <p>{{quantity}}</p> <button @click="add">+</button>
            <p>$ {{cartProduct.price*quantity}}</p>
        </div>  
    </div>
    export default {
     data(){
      return{
        quantity:1
       }
     },
     methods:{
        add(){
         this.quantity++;
    },
       subtract(){
        this.quantity--;
    },
   }

你要做的就是,为所有有数量字段的产品建立一个对象,就像这样

<template>
  <div>
    <div
      v-for="(cartProduct, index) in cartProducts"
      :key="index"
      class="px-3 py-2"
    >
      <div id="cartProducts">
        <p>{{ cartProduct.description }}</p>
        <button @click="subtractProduct(index)">-</button>
        <p>{{ cartProduct.quantity }}</p>
        <button @click="addProduct(index)">+</button>
        <p>$ {{ cartProduct.price * cartProduct.quantity }}</p>
      </div>
    </div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      cartProducts: [
        {
          description: "product 1",
          price: 100,
          quantity: 0,
        },
        {
          description: "product 2",
          price: 100,
          quantity: 0,
        },
        {
          description: "product 3",
          price: 100,
          quantity: 0,
        },
      ],
    };
  },
  methods: {
    addProduct(index) {
      this.cartProducts[index].quantity++;
    },
    subtractProduct(index) {
      if (this.cartProducts[index].quantity !== 0)
        this.cartProducts[index].quantity--;
    },
  },
};
</script>