Как обновить массив в Angular? - PullRequest
0 голосов
/ 14 сентября 2018

Привет! Я занимаюсь разработкой веб-приложения на Angular 5. У меня есть один массив, и я хочу обновить этот же массив на основе значения другого массива. Например, у меня есть createarray, как показано ниже.

enter image description here

У меня есть другой объект, как показано ниже.

data:{
checked:true,
name:infomodel
}

Теперь в данных проверено значение true. Поэтому для инфомодели в createarray я хочу обновить проверенное свойство.

Я попробовал, как показано ниже.

           let copyCreate = Object.assign({}, node.data);
            copyCreate.checked = true;
            const targetIdxCreate = this.createnode.map(item => item.name).indexOf(copyCreate.name);
            this.createnode[targetIdxCreate] = copyCreate;

            let copyUpdate = Object.assign({}, node.data);
            copyUpdate.checked = false;
            const targetIdxUpdate = this.updatenode.map(item => item.name).indexOf(copyUpdate.name);
            this.updatenode[targetIdxUpdate] = copyUpdate;

В приведенном выше коде обновления createnode проверяются с помощью true. Также я делаю updatenode, проверенный на false. После выполнения вышеуказанного кода оба массива будут проверять свойство false.

Может кто-нибудь помочь мне сделать это?

Ответы [ 3 ]

0 голосов
/ 14 сентября 2018

Просто используйте array = array.slice(). Это создаст новый объект Array, вызовет ChangeDetection и т. Д.

0 голосов
/ 14 сентября 2018

Попробуйте заменить ваш код этим

let item = this.createnode.find(item => item.name == data.name)
item.checked = data.checked;
this.createnode = [...this.createnode, item];
0 голосов
/ 14 сентября 2018

Я бы предложил добавить чек на основе поля 'id', которое есть в вашей записи, которое вы хотите обновить. В этом случае идеальный способ обновить запись будет выглядеть так:

// Assuming updateWith is the object that you want to update with
const targetIdx = this.createnode.map(item => item.id).indexOf(this.updateWith.id);
this.createnode[targetIdx] = this.updateWith;

если вы по-прежнему предпочитаете использовать имя в качестве параметра, для которого вы хотите проверить условие, то вы можете просто изменить идентификатор на имя в функции карты следующим образом:

// Assuming updateWith is the object that you want to update with
const targetIdx = this.createnode.map(item => item.name).indexOf(this.updateWith.name);
this.createnode[targetIdx] = this.updateWith;

Надеюсь, это решит вашу проблему:)

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