Объект в массиве не обновляется в JavaScript - PullRequest
1 голос
/ 03 марта 2020

Я пишу несколько строк кодов машинописи в приложении Angular, и в конструкторе есть несколько логических переменных, и массив object.Part каждого объекта в этом массиве формируется с помощью входных переменных.

selftest: boolean;
failed: boolean;

    locoStateItems = [
    {
        name: 'FAILED',
        isSelected: this.failed
    },
    {
        name: 'SELFTESTED',
        isSelected: this.selftest
    }

позже в другой функции

toggleMe(name: string){
   if (name === 'FAILED') {
       this.failed = !this.failed
   } else if(name === 'SELFTESTED'){
       this.selftest = !this.selftest;
   }
}

locoStateItems с показом в DOM не будут затронуты, если я явно не напишу следующее

locoStateItem[0].isSelected = this.failed;
locoStateItem[1].isSelected = this.selftest;

Какое объяснение для и как мне избежать этого?

1 Ответ

1 голос
/ 03 марта 2020

Это потому, что логическое значение является примитивом, что означает, что вы просто присваиваете значение при объявлении массива. Это не присваивает ссылки на логические переменные, поэтому они не обновляются автоматически в объектах массива.

Вам придется вручную обновлять логические значения объектов массива, если вы намерены сохранить эту структуру.

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

toggleMe(name: string){
   if (name === 'FAILED') {
       this.failed = !this.failed;
       this.locoStateItem[0].isSelected = this.failed;
   } 
   else if(name === 'SELFTESTED'){
       this.selftest = !this.selftest;
       this.locoStateItem[1].isSelected = this.selftest;
   }
}

Я не уверен, что подразумевается под этим методом, но из того, что я могу сказать из вашего вопроса, это должно быть функционально.

...