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