更改数组引用后,Angular 7 UI将不会立即刷新

时间:2019-07-07 17:56:06

标签: angular

当我在回调中更改对基础数组的引用时,无法立即刷新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,但是在数据库发生更改时仅刷新列表并不难,不是吗?

我猜想这与在回调中完成的新数组分配有关。

要使它正常工作,我需要做什么?

1 个答案:

答案 0 :(得分:0)

出于性能原因,某些功能在角度区域之外运行,因此更改检测不会检测到由这些方法引起的任何更改。 要在ng区域内强制执行,请尝试在zone.runTask内部运行数据库调用:

Database.addChangeListener(newArray => {
  zone.runTask(() => {
    this.todos = newArray;
  });
});

当zone是:NgZone时,将其注入到构造函数中:

constructor(private zone: NgZone)

Read more