Angular2,Data也保持绑定到函数内部的原始变量

时间:2017-04-08 11:39:54

标签: arrays angular data-binding

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

<li (click)="replicateTicket(data);">&nbsp; Replicate</li>

在函数内部,我更新了变量的名称和ID,并将其推入数组中。 (在给出的例子中,我没有推动数据更生动地解释行为。

replicateTicket(data:any){
          data.name = data.name + ' (Replicated)';
          console.log(this.ticketList[this.ticketList.length-1].id);
          data.id = 0;
          console.log(this.ticketList[this.ticketList.length-1].id);
}

我想要的是如果原始数据的id是5而不是它不应该变为0。

  1. 运行plunker

  2. 点击458 abc。

  3. 它应该只更新新数据而不是当前数据。

  4. 我做错了吗?

2 个答案:

答案 0 :(得分:5)

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

replicateTicket(ticket:any){
    let t = JSON.parse(JSON.stringify(ticket));
    t.name += ' (Replicated)';
    t.id = 0;
    this.ticketList.push(t);
}

答案 1 :(得分:0)

你也可以这样做

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