Как я могу перерисовать ngFor, если данные не меняются? - PullRequest
0 голосов
/ 25 апреля 2019

Обзор:

У меня есть список, который связывает два массива вместе с ng для использования труб.я связываю массивы с typeID.

В одном массиве перечислены все доступные типы, а в другом хранятся выбранные типы вместе с дополнительной опцией. Примечание Массивы имеют только 2 свойства, имя и идентификатор

Проблема:

Поскольку мой ngFor привязан к первому массиву при изменении данных вво втором массиве ничего не обновляется, поэтому в тот момент, когда мне нужно вспомнить мой метод http, который собирает те же самые данные просто для обновления списка.

Мне нужен способ принудительного рендеринга без вызова моего API каждый раз, когда что-то визменения второго массива

StackBlitz:

https://stackblitz.com/edit/angular-nxkwaf

Ответы [ 4 ]

0 голосов
/ 01 мая 2019

Используя измененную версию решения onik, мне удалось решить эту проблему с помощью меньшего количества строк кода

Solution

this.secondary = this.secondary.concat({ primaryID: primary.primaryID, name: primary.name, isChecked: false });

Stackblitz

https://stackblitz.com/edit/angular-rydedr

0 голосов
/ 25 апреля 2019

Вы можете импортировать ChangeDetectorRef из углового сердечника и запустить markForCheck.Это, вероятно, не самый оптимальный способ, но в вашем случае он должен перерисовать компонент

0 голосов
/ 25 апреля 2019

вы можете установить новую ссылку на этот массив, и он будет перерисован,

this.secondary = [...this.secondary];
0 голосов
/ 25 апреля 2019

Вы можете использовать ngIf и setTimeout , чтобы сделать рендеринг ngFor. Звоните this.reload() вместо this.getPrimary()

reload() {
  this.show = false;
  setTimeout(() => this.show = true);
}

Оберните ngFor внутри ngIf

<ul class="list list-a" *ngIf="show">
   <li *ngFor="let p of primary;">

Плункер : https://stackblitz.com/edit/angular-geuesx

...