2016-08-19 13 views
0

私はServiceを持っています(コールバックや約束を使うことはできません。データの更新はランダムです)。サービスは更新を取得し、サービスのオブジェクトに保存します。私は$scopeのサービスオブジェクトを持つコントローラを持つ角度アプリページを持っています。サービスからコントローラへの角度非同期のアップデートとレンダリング

しかし、ページにデータを表示する際に問題が発生しました。今は$ timeout()を使ってビューを更新していますが、よりエレガントな方法を探しています。

私はサービスのオブジェクトに$watchを使用できますが、ブラウザにとっては重すぎると思います。

サービスのデータが変更された後でビュー/コントローラをレンダリングする正しい方法は何ですか?

+0

を解決するあなたも$スコープを使用することができます。$(適用)が、腕時計だけに行く.. – Ruhul

+0

十分な情報がありません。 '$ scope。$ digest()'を使って物事を最適化することができます。現在のスコープとネストされたスコープのダイジェストをトリガーしますが、他の方法はルートスコープのダイジェストをトリガーします。 – estus

+0

興味深いですね!しかし$ digestを呼び出すためには$スコープが必要です...? いずれにしても、私の問題の簡単な例は次のとおりです。https://plnkr.co/edit/53m5cOe8XDDDRrxFX0NK?p=preview "setTimeout()"を使ってWebSocketデータをシミュレートしようとしました。データがプッシュされているため、私は約束をすることができません。 service.jsで$ timeoutにコメントしました。コメントを外すとレンダリングが始まります。 – Axel186

答えて

0

$rootScope.$broadcastを代用することもできますが、$ watchと同じくらい重くても、$ watchを使用することを恐れている理由はわかりません。 SO $rootscope.$broadcastチェックthisについて続きを読むには

$scope.$on('WatchedData', function(event) { return stuff }); 

$rootScope.$broadcast('WatchedData', data); 

そして、あなたのコントローラでは、次のような何かを:あなたのサービスにこのコード行を追加し$broadcastを使用するには

答え

+1

ブロードキャストは '$ watch'よりも「安い」と思うのですが、' $ rootScope'に既に存在するリスナーを使用しているからです。私は正しく推測していますか? –

0

私はあなたにお勧めしますultimatly、それはコントローラの前にデータをロードすると、ビューがあなたのルーティングファイルにinstantianting、および関数に

をあなたのサービスを注入されますが、このデモを見ることができPLunker Demo

+0

ページの準備が整った後にデータがプッシュされ、数秒ごとに更新がパックされます。 – Axel186

関連する問題