Angular Let是从先前声明的时间引用值吗?

时间:2019-06-08 22:03:02

标签: angular service

我将对象传递给服务,更改属性并将其传递回。我希望'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
}

2 个答案:

答案 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

您应该注意,浅拷贝可能可以,但是如果您具有嵌套属性,则会遇到相同的问题。