我有一个Angular2 applcation。它连接到SignalR服务并接收定期更新(每10秒)。这些更新通过发送器从angualr服务发送到组件。 我注意到,当新数据进入时,ui并不总是更新,有时会延迟10秒左右。
为了解决这个问题,我在组件中添加了对detectChanges()的调用...
this._signalrService.onGetData.subscribe((data: any) => {
// update some data properties
this._cd.detectChanges();
});
我也使用了区域来实现同样的目标......
this._signalrService.onGetData.subscribe((data: any) => {
this._ngZone.run(() => {
// update some data properties
});
});
基本上我想在组件接收数据时强制进行ui更新。
这些方法中的任何一种都是正确的吗?该区域应该放在其他地方吗?
答案 0 :(得分:1)
我认为这是正确的方法。
当更新对于包含问题代码的组件而言是更新时使用this._cd.detectChanges
当更新也影响其他组件时,请使用this._ngZone.run(...)
。一个常见的例子是使用router.navigate(...)
代替this._ngZone.run(...)
ApplicationRef.tick()
。它会导致整个应用程序的变更检测。