Angular let ссылается на значения, когда они были объявлены ранее? - PullRequest
0 голосов
/ 09 июня 2019

Я передаю объект службе, меняю свойство и возвращаю его обратно. Я ожидал, что «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 голосов
/ 09 июня 2019

Я согласен с ответом @Vaughan Hilts, но вы хотите исправить это, просто обновите строку 3, как показано ниже

let tempcard = JSON.parse(JSON.stringify(card));

, дайте мне знать, если что-то не так.

0 голосов
/ 09 июня 2019

Вам нужна глубокая копия tempcard

Например, что-то вроде:

let tempcard = clone(card);

... где клон - произвольная clone функция

Вы должны прочитать о глубоком клонировании здесь: Глубокое копирование объектов в Angular

Обратите внимание, что поверхностная копия может подойти , но если у вас есть вложенные свойства, вы столкнетесь с той же проблемой.

...