Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular2、Zones vs ChangeDetectorRef强制对接收到的数据进行ui更新_Angular - Fatal编程技术网

Angular2、Zones vs ChangeDetectorRef强制对接收到的数据进行ui更新

Angular2、Zones vs ChangeDetectorRef强制对接收到的数据进行ui更新,angular,Angular,我有一份英语申请书。它连接到信号服务并接收定期更新(每10秒一次)。这些更新通过发射器从angualr服务发送到组件。 我注意到当新数据进来时,ui并不总是更新,有时会有10秒左右的延迟 为了解决这个问题,我在组件中添加了对detectChanges()的调用 this._signalrService.onGetData.subscribe((data: any) => { // update some data properties thi

我有一份英语申请书。它连接到信号服务并接收定期更新(每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更新


这两种方法中有一种是正确的吗?这个区域应该放在别的地方吗?

我认为这是正确的方法

  • 使用
    this.\u cd.detectChanges
    当更新是包含问题中代码的组件的本地更新时

  • 当更新也影响其他组件时,请使用
    this.\ngZone.run(…)
    。一个常见的例子是使用
    router.navigate(…)

  • 而不是
    this.\ngZone.run(…)
    ApplicationRef.tick()
    也可以使用。它会导致整个应用程序的更改检测运行