我将对象传递给服务,更改属性并将其传递回。我希望'tempcard'和'card'在被服务更改后将保留不同的值,但是它们是相同的。我确认该服务正在更改该值。我想念什么?
输出:
新电话
卡(22925)已移动:---在维修之前
79至79
卡(22925)已移动:---售后服务
25到25
预期:
卡(22925)已移动:---在维修之前
79至79
卡(22925)已移动:---售后服务
79 至25
代码:
//card is an object with the board1LaneId set to 79
console.log('new call')
let chs = new CardHelperService(card, this.flatTypes, this.auth);
let tempcard = card;
console.log('card (' + tempcard.id + ')moved: \n' +
tempcard.board1LaneId + ' to ' + card.board1LaneId + '\n')
card = chs.moveLane(dest); //call to my service
console.log('card (' + tempcard.id + ')moved: \n' +
tempcard.board1LaneId + ' to ' + card.board1LaneId + '\n')
服务代码:
moveLane(dest:string){
this.card.board1LaneId=25
return this.card
}
答案 0 :(得分:0)
我接受@Vaughan Hilts的答案,但您只想修复如下所示的第3行
let tempcard = JSON.parse(JSON.stringify(card));
让我知道是否有问题。
答案 1 :(得分:-1)
您需要tempcard
的深层副本
例如,类似:
let tempcard = clone(card);
...其中,克隆是您对任意clone
函数的选择
您应该在此处阅读有关深克隆的内容:Deep copying objects in Angular
您应该注意,浅拷贝可能可以,但是如果您具有嵌套属性,则会遇到相同的问题。