2017-04-22 20 views
0

私は2つの指令を持っています。$httpまたはngResourceのように、それぞれの指令でリンクに非同期関数があります。ボタンAをクリックして、指示文Aを介してバックエンドからデータを取得し、指示文Bとそのビュー内のデータを変更したいとします。

$boastcastのデータサービスを使用すると、ほとんどの人はディレクティブAとBの間でデータを共有し、$applyを使用してビューを更新します。しかし、私は頻繁にinprogエラーを取得します。だから、それを解決する最善の方法は何ですか?

+0

こんにちは。コードを投稿してください – Akashii

+2

[mcve]を提供してください。放送を必要としないかもしれないし、おそらく$ apply()を必要としないかもしれない。 – charlietfl

答えて

0

実行中のエラーは$scope.$applyです。手動でalread runingて、次に、この例外は使用が

if(!$scope.$$phase) { $scope.$apply() }

+0

おそらくそれはうまくいくだろうが、今日は悪い習慣として認められている。まず、$ scopeからの依存関係を回避する必要があります。第二に、$$位相は内部の角度のものです。これは、$ applyではなくim $ timeoutというコードをラップすることで解決できます。 $ timeoutは、サイクルが既に実行されていない場合にのみダイジェストサイクルを安全に呼び出します。 –

0

代わりの$にしようと、適用とラッピングコードを適用する前にダイジェストが実行されているかどうかを確認だから、

を発生しますダイジェストループを実行しようとすると$ timeoutを挿入し、あなたのコードを$ timeoutでラップします。サイクルが既に実行されていない場合にのみダイジェストサイクルを安全に実行します。

関連する問題