无法在Angular中使用for循环中的splice删除项目

时间:2018-04-16 06:09:02

标签: arrays angular splice

我正在尝试使用splice从现有阵列中删除项目但是没有按预期工作。我甚至尝试使用过滤器而不是拼接,但得到了相同的输出。有人可以看看这里的功能,并帮我弄清楚问题。

请尝试在此处添加可用的项目 - https://08b11a0437.stackblitz.io/products,然后导航到购物车页面并尝试删除每个项目。这些项目未按预期删除。

相关代码可在cartservice.ts,cartcomponent.ts(removeProductFromCart())和cartcomponent.html - https://stackblitz.com/edit/08b11a0437?file=app%2Fcart%2Fcart.component.ts

中找到

1 个答案:

答案 0 :(得分:0)

问题是您要从cartService中的数组中删除项目,但对于UI,您使用的是products数据中的值。

快速解决方法是重新加载您的产品阵列。只需在removeProductFromCart的{​​{1}}功能中添加以下代码即可。在函数末尾添加它。

ShoppingCartComponent

除此之外还有另一个问题。您正在使用this._cartService.getAddedProducts().subscribe((data: IProduct[]) => { this.products = data.map(item => item[0]); }); 隐藏ShoppingCartComponent html中的项目。考虑到您的购物车中有三个产品(ID为1,2和3),当第一个产品被移除时,*ngIf="removeItemId !== product.id"将有1个,因此第一个产品将被隐藏。但是当用户删除第二个产品时,removeItemId将设置为2,现在产品1将可见。