Angular Array.push使所有对象都相同
我的Angular应用程序中有一个Angular Array.push使所有对象都相同,angular,typescript,Angular,Typescript,我的Angular应用程序中有一个cart.service,用于管理从列表添加到购物车的项目 对于每个项目,我可以添加一些变体,使其对象发生变化,但当我使用两个不同的变体添加同一项目两次时,它会将第一个推送的对象更改为与上次添加的相同 就像我添加到购物车{id:1,variants:[{2}]}和第二项{id:1,variants:[{3}]}一样,数组将是[{id:1,variants:[{3}]},{id:1,variants:[{3}}] 我向item对象变量添加的方法是在我传递item对
cart.service
,用于管理从列表添加到购物车的项目
对于每个项目,我可以添加一些变体,使其对象发生变化,但当我使用两个不同的变体添加同一项目两次时,它会将第一个推送的对象更改为与上次添加的相同
就像我添加到购物车{id:1,variants:[{2}]}
和第二项{id:1,variants:[{3}]}
一样,数组将是[{id:1,variants:[{3}]},{id:1,variants:[{3}}]
我向item对象变量添加的方法是在我传递item对象并执行以下操作的复选框上的(change)
checkVariante(variante: Varianti, event: any, plu: Plu): void {
if (event.target.checked) {
variante.stato = 'PIU';
plu.varianti.push(variante); // adding variant to item object
} else {
const index = plu.varianti.indexOf(variante); // removing variant from item object
if (index !== -1) {
plu.varianti.splice(index, 1);
}
}
然后我使用cart.service将其添加到cart中,如下所示:
addToCart(plu: Plu): void {
this.cartService.addToCart(plu);
}
cart.service
addToCart(product: Plu): any{
product.qta = 1;
this.carrello.plu.push(product);
}
但是,如果在添加第一个项目后,我刷新页面,然后添加具有其他变体的同一项目,则所有项目都将正确添加到购物车中…似乎在向项目添加变体时,我正在更改当前项目对象..但我如何解决它呢?您有一个
variante
对象,您可以更改值,然后按。您n如果不需要相同的对象,则需要新对象。@DaveNewton yea实际上是通过使用object.assign()解决的
通过更改克隆对象而不是原始对象,您就有了一个Variant
对象,您可以更改一个值,然后按下。如果您不想要相同的对象,则需要新对象。@DaveNewton yea实际上是通过使用object.assign()
和更改克隆对象而不是原始对象来解决的