У меня проблема с ngFor при использовании Angular OnPush ChangeDetection.
Это мой код:
app.state.ts
export class Node {
title: string;
}
export class Tree {
nodes: Array<Node>
}
home.component.ts
@Component({
changeDetection: ChangeDetectionStrategy.OnPush
})
export class HomeComponent implements OnInit {
tree$: Observable<Tree>;
ngOnInit() {
this.tree$ = this.store.select(state => state.tree);
}
}
home.component.html
Number of nodes: {{ (tree$ | async).nodes.length }}
<div *ngFor="let node of (tree$ | async).nodes" class="node-list">
{{ node.title }}
</div>
По умолчанию массив узлов пуст. Когда я отправляю действие для добавления нового узла в массив node . количество узлов в шаблоне изменяется, но список узлов по-прежнему пуст.
Я не понимаю, почему. Есть ли у вас какие-либо идеи? Спасибо!
UPDATE
Добавляя * ngIf в контейнер, содержащий список узлов, он работает.
<div *ngIf="tree$">
<div *ngFor="let node of (tree$ | async).nodes" class="node-list">
{{ node.title }}
</div>
</div>
Но я до сих пор не понимаю, почему. Не могли бы вы объяснить это поведение, пожалуйста?