@bitalikrr

Angular (8) почему не обновляеться шаблон?

У меня есть компонент, в нем есть свойство sensors: Array
В шаблоне есть строка
<div class="pr-sensors-item" *ngFor="let item of sensors">


проблема в том что когда я пытаюсь установить новые елементы массива то шаблон не обновляется
причем это происходит только если я меняю массив из callback функции после Http Запроса
тоесть:
getSensors() {
this.sensors = [{}, {}] // так работет и шаблон рендерится
this.sensorsService
      .get(this.machineParentId)
      .subscribe((response) => {
            this.sensors = response.sensors // так не работает
            // or
            this.sensors.push(...response.sensors)
      });
}
  • Вопрос задан
  • 468 просмотров
Решения вопроса 1
@PavelPikat
У вас случайно в компоненте не стоит changeDetection: ChangeDetectionStrategy.OnPush?
Ангуляр детектит изменения в инпутах по референсу при OnPush. Когда вы создаете новый список с
this.sensors = [{}, {}], то ссылаетесь но новый список, а при измнении значения через this.sensors.push ссылка на объект не меняется.

Поэтому либо используйте spread operator
this.sensors = [...this.sesnsors, ...response.sensors]

Либо вручную говорите Ангуляру провести проверку измнение через this.changeDetector.markForCheck()
(changeDetector из конструктора, private changeDetector: ChangeDetectorRef)
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
EreminD
@EreminD
Кое-что умею
*ngFor="let item of sensors$ | async;"
sensors$ = this.sensorsService.get(this.machineParentId);
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы