Arrays Angular2,数据也被绑定到函数内部的原始变量

Arrays Angular2,数据也被绑定到函数内部的原始变量,arrays,angular,data-binding,Arrays,Angular,Data Binding,我正在调用一个函数来复制*ngFor循环中的数据,如下所示 <li (click)="replicateTicket(data);">&nbsp; Replicate</li> 我想要的是,若原始数据的id为5,那个么它不应该更改为0 跑 点击458 abc 它应该只更新新数据,而不是当前数据 我做错了什么吗?您需要创建当前对象的副本,对其进行更改,然后将新对象推送到数组中,例如:(我使用了您的Plunker中的代码) 你也可以这样做 replicateTi

我正在调用一个函数来复制*ngFor循环中的数据,如下所示

<li (click)="replicateTicket(data);">&nbsp; Replicate</li>
我想要的是,若原始数据的id为5,那个么它不应该更改为0

  • 点击458 abc

  • 它应该只更新新数据,而不是当前数据


  • 我做错了什么吗?

    您需要创建当前对象的副本,对其进行更改,然后将新对象推送到数组中,例如:(我使用了您的Plunker中的代码)

    你也可以这样做

      replicateTicket(ticket:any){
              let a = Object.assign({}, ticket);
              a.name = ticket.name + ' (Replicated)';
              a.id = 0;
              this.ticketList.push(a);
            }
    

    面对同样的情况。但我不明白这种行为,这是一只虫子吗?@YASHDAVE它不是一只虫子,您在Plunker中所做的是:您每次都引用同一个对象,并将其一次又一次地推送到一个数组中,这就是为什么所有元素都会发生更改的原因-数组的所有元素基本上都是您最初创建的对象的同一个实例,但是
    let t=JSON.parse(JSON.stringify(ticket))每次都创建一个对象的副本。通过let t=ticket它也应该工作。但是它没有@斯特凡-svrkota@YASHDAVE
    let t=ticket
    不应该工作,因为您正在将对象
    ticket
    的引用分配给变量
    t
    ,而
    let t=JSON.parse(JSON.stringify(ticket))创建对象
    票证的副本
    并将其存储在变量
    t
    中。
    replicateTicket(ticket:any){
        let t = JSON.parse(JSON.stringify(ticket));
        t.name += ' (Replicated)';
        t.id = 0;
        this.ticketList.push(t);
    }
    
      replicateTicket(ticket:any){
              let a = Object.assign({}, ticket);
              a.name = ticket.name + ' (Replicated)';
              a.id = 0;
              this.ticketList.push(a);
            }