обновление значения в скопированном объекте влияет на все остальные скопированные объекты в угловых 5 - PullRequest
0 голосов
/ 06 июня 2018

В Компоненте я сделал http-вызов, чтобы получить всех сотрудников из Бэкэнда.

Компонент: -

 const req = this.assigneeService.getAssignees();
    req.subscribe(
      data => {
        this.assignees = data['data'];
        // On response json will be like below
        [  
         {  
           name:"Name 3",
           id:1,
           status:"Not_Assigned"
         },
         {  
           name:"Archana",
           id:2,
           status:"Not_Assigned"
          }
        ]
       },
       err => {       
     }
 );

При нажатии кнопки вызывается следующая функция и создаетсяскажем объект М.Теперь предположим, что я создал еще 2 таких же объекта, скажем, objectM1 и objectM2 с одинаковым методом.

    public addObj1(): void {
        let asignees1 = this.assignees.slice(0);
        let objectM = new Module();
        objectM.assignees = asignees1;
      }

//onchange funtion where object is selected Object, action as string and id of user
    changeAssigneeState(object, action, assigneeId ) {

    for (let a of object.assignees) {
     if (a.id == assigneeId) {
        a.status = action;
      }
     }
    }

При изменении assignee.status для идентификатора 1 в objectM.Это влияет на objectM1 и objectM2 assignee.status с одинаковым идентификатором.

Пожалуйста, помогите мне.Заранее спасибо.

Ответы [ 3 ]

0 голосов
/ 06 июня 2018

глубокий клон объектов массива поможет вам. Попробуйте это,

let asigneesData = JSON.parse(JSON.stringify(this.assignees));
0 голосов
/ 06 июня 2018

Вы также можете сделать это, используя Object.assign()

newAssignes = [];

this.assignees.forEach((assignee, i) => {
    this.newAssignes[i] = Object.assign({}, assignee)
});

DEMO

0 голосов
/ 06 июня 2018

let asignees1 = this.assignees.slice(0); массив клонов , но у объектов внутри есть ссылки на объекты в исходном массиве, вам нужно получить глубокий клон массива объектов, вы можете сделать это с помощью простого трюка:

let asignees1 = JSON.parse(JSON.stringify(this.assignees));

Тогда у вас будет клонированный массив без ссылок на исходный массив.

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