2017-01-16 5 views
1

私はAngular2のアプリケーションを持っています。これはSignalRサービスに接続し、定期的な更新を受け取ります(10秒ごと)。これらの更新は、エフェクタを介してコンポーネントへのangualrサービスから放出されます。 新しいデータが入ったときにUIが常に更新されていないことに気付きました。時には10秒ほどの遅延がありました。Angular2、ZonesとChangeDetectorRefは、受信したデータを強制的に更新します。

は、この問題を回避するために、私は基本的に私も同じことを達成するためにゾーンを使用している部品で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 
      }); 
     }); 

を追加しましたコンポーネントがデータを受け取ったときに強制的に更新したいです。

いずれかの方法でこれを行うのが正しいですか?ゾーンを別の場所に配置する必要がありますか?

答えて

1

私はそれが正しい方法だと思います。

  • 使用this._cd.detectChanges更新は、更新は他のコンポーネントに影響を与えたときに、あなたの質問に

  • 使用this._ngZone.run(...)をコードが含まれているコンポーネントに対してローカルです。一般的な例は、this._ngZone.run(...)の代わりにrouter.navigate(...)

  • の代わりにthis._ngZone.run(...)ApplicationRef.tick()を使用することもできます。これにより、アプリケーション全体の変更検出が実行されます。

関連する問題