Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular Array.push使所有对象都相同_Angular_Typescript - Fatal编程技术网

Angular Array.push使所有对象都相同

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对

我的Angular应用程序中有一个
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()
和更改克隆对象而不是原始对象来解决的