单击时显示更新值

Show updated value on click

我有一个将商品添加到购物车的功能,当商品已经在购物车中时,我希望它只会将该商品的数量加 1(确实如此)。

问题是我无法查看更新的数量,直到有另一个操作,例如将另一个项目添加到购物车。

我遵循了 的解决方案,但仍然不适合我。

我希望能够在添加项目后立即查看更新后的值。

addItemToCart : function(item){
       if(this.cart.includes(item)){
            item.quantity += 1;
            console.log(item.quantity);
        }
       else{
           this.cart.push(item);
          this.set(item.quantity = 1);
       }
},

HTML:

 <ul>
    <li>Cart is empty</li>
    <li v-for="item in cart">
        {{item.name }}
        <span class="pull-right">
        ({{ item.price }} x {{ item.quantity }})
        <i class="glyphicon glyphicon-remove cart-item-action" @click="removeItemFromCart(item)"></i>
    </span>
    </li>
</ul>  

我相信这是因为 caveats vue 中的变更检测。

由于 JavaScript 中的限制,Vue 无法检测到数组的以下更改:

  1. 当您直接使用索引设置项目时,例如vm.items[indexOfItem] = newValue

  2. 修改数组长度时,例如vm.items.length = newLength

所以您需要做的是,您可以在函数 addItemToCart 中传递该购物车商品的索引并使用 Vue.set,如下所示:

addItemToCart : function(item){
       if(this.cart.includes(item)){
            var index = this.cart.indexOf(item)
            this.cart[index] += 1
            Vue.set(this.cart, index, this.cart[index])
            //or 
            //  this.$set(this.cart, index, this.cart[index])

            //or 
            //  this.cart.splice(index, 1, this.cart[index])
            console.log(item.quantity);

        }
       else{
          this.cart.push(item);
          this.set(item.quantity = 1);
       }
},