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