Angular 6 - Обновление свойств объекта без их установки - PullRequest
0 голосов
/ 04 октября 2018

У меня есть редактор, в котором пользователь может редактировать продукт.Я сохраняю экземпляр продукта в ngOnInit в initialProduct, чтобы можно было сбросить изменения.

К сожалению, у меня возникает странная проблема: При добавлении нового тега свойстваinitialProduct изменяется без их установки.

Вот блик стека:

https://stackblitz.com/edit/angular-yxrh2d?file=src%2Fapp%2Fapp.component.ts

Ответы [ 2 ]

0 голосов
/ 04 октября 2018

С этим кодом

this.initialProduct = this.product;

вы присваиваете this.initialProduct ту же переменную, расположенную в индексе памяти, связанном с this.product.Это потому, что this.product указывает на адрес памяти, а с предыдущей операцией вы копируете только адрес памяти.Поэтому this.product и this.initialProduct указывают на одну и ту же переменную.

Вам необходимо создать другой массив и скопировать this.product значения в this.initialProduct (новый массив).

Вы можетесделать это различными способами.Например:

    // this.initialProduct = this.product;
    this.initialProduct = {
      tags: Array.from(this.product.tags)
    }

или

    // this.initialProduct = this.product;
    this.initialProduct = {
      tags: this.product.tags.concat()
    }

или

    // this.initialProduct = this.product;
    this.initialProduct = {
      tags: this.product.tags.slice()
    }
0 голосов
/ 04 октября 2018

из-за ссылок

this.tags = this.product.tags;

Вы можете сделать следующее (ES6):

this.tags = [...this.product.tags];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...