我想将我的商品添加到购物车中,如果它已经在购物车中,那么它会显示警报并且不再添加

时间:2020-07-20 08:11:55

标签: angular ionic-framework ionic4 storage shopping-cart

addCart(item){
    this.stor.get('cart').then(val => {
        if (val) {
            for (let i = 0; i <= val.length; i++) {
                if (val[i].id == item.id) {
                    alert('Already in cart')
                }
                else {
                    this.items.push(item);
                    this.stor.set('cart', this.items);
                }
            }
        }
        else {
            this.items.push(item);
            this.stor.set('cart', this.items);
        }
    })
}

在我的应用中,我想添加能够正常使用的购物车功能,但是当有人再次在购物车中添加同一项目时,它会显示警报,并且不会再次将此值插入存储中,但存在一些问题。但是通过我的代码显示警报,但还会在存储中插入重复的值。我知道有一些愚蠢的错误,但我无法理解,请帮助

2 个答案:

答案 0 :(得分:0)

通过适当的缩进,很容易看出为什么它不起作用。

for (let i = 0; i <= val.length; i++) {
    if (val[i].id == item.id) {
        alert('Already in cart')
    }
    else {
        this.items.push(item);
        this.stor.set('cart', this.items);
    }
}

在此部分中,仅当物品尚未在购物车中时(其他)将其添加到购物车中。

请执行以下操作:

for (let i = 0; i <= val.length; i++) {
    if (val[i].id == item.id) {
        alert('Already in cart')
    }
    this.items.push(item);
    this.stor.set('cart', this.items);
}

此代码将不具有预期的行为,因为添加项处于循环中。

您可以改为执行以下操作:

addCart(item){
    this.stor.get('cart').then(val => {
        if (val) {
            for (let i = 0; i <= val.length; i++) {
                if (val[i].id == item.id) {
                    alert('Already in cart')
                    break;
                }
            }
        }
        
        this.items.push(item);
        this.stor.set('cart', this.items);
    })
}

通过这种方式,您总是可以添加项目,整个循环就在这里,只是为了处理警报。

答案 1 :(得分:0)

使用以下代码。

 addCart(item) {
    this.stor.get('cart').then(val => {
      if (val) {
        const isItem = val.find(x => x.id == item.id);
        if (isItem) {
          alert('Already in cart')
        } else {
          this.items.push(item);
          this.stor.set('cart', this.items);
        }

      } else {
        alert('Something wrong')
      }


    })
  }