当我在回调中更改对基础数组的引用时,无法立即刷新ngFor列表。回调由数据库调用。
在我的模板中,我有这个:
<ion-item *ngFor="let todo of todos">
// Other items here
</ion-item>
在我的课堂上,我有这个:
Database.addChangeListener(newArray => {
// This callback gets called, but the UI does not get refreshed.
// I can see that the underlying array has been changed.
// The UI only refreshes when I click on it.
this.todos = newArray;
})
我尝试过ChangeDetectionStrategy.OnPush时没有运气。我开始研究Observables,但是在数据库发生更改时仅刷新列表并不难,不是吗?
我猜想这与在回调中完成的新数组分配有关。
要使它正常工作,我需要做什么?
答案 0 :(得分:0)
出于性能原因,某些功能在角度区域之外运行,因此更改检测不会检测到由这些方法引起的任何更改。 要在ng区域内强制执行,请尝试在zone.runTask内部运行数据库调用:
Database.addChangeListener(newArray => {
zone.runTask(() => {
this.todos = newArray;
});
});
当zone是:NgZone时,将其注入到构造函数中:
constructor(private zone: NgZone)