2

$scope.$watchデータ モデルを取得するための呼び出し後に評価されないという問題があります。説明しますが、せっかちな人のために、このフィドルに基づいて何が起こっているのかを理解できるかもしれません: http://jsfiddle.net/ADukg/3964/

私たちの Angular プロジェクトでは、いくつかのディレクティブに独自のデータ モデルを構築させます。これは、含まれている他のディレクティブに渡されることもあります。この場合、独自のモデルを構築するディレクティブはmyMessagesであり、そのデータが渡されるディレクティブは ですmyObjects

ディレクティブは、関連するメッセージをいつでも取得するためにmyMessages呼び出されるサービスに依存しています (コードでは、これは値などに基づいています)。私の例では、パラメーターを無視して、データを直接返しました。messageManager$routeParamshttp://localhost/messages/34

興味深いのは、55 行目と 68 行目 (ラッピング コール) をコメント アウトするとsetTimeout、このコードは "問題なく" 動作することです (引用符で囲みます。これは、実際に適切なプラクティスを使用しているかどうかがよくわからないためです)。 )。ただし、HTTP 要求をシミュレートするために呼び出しを保持すると、ディレクティブのメソッドのobjectsスコープ変数の値が空になり、変数に対して設定されたウォッチが 2 秒後に実行に失敗します。myObjectslink

実際のメソッドへの呼び出しと内部の$scope.$apply両方を明示的に呼び出して、時計をだまして再評価させようとしましたが、次のエラーが発生しました。ctrl.loadData()loadData

$digest は既に進行中です

ドキュメントを見ると、これらの呼び出しを行うときにまだ Angular コンテキスト内にいるため、それは正しいようです (サービス内で ngResource を使用しているため、jQuery コンテキストや何か奇妙なものを呼び出していません)。objects何を試しても(関数の3番目の$scope.$watchパラメータtrue

どんな助けでも大歓迎です。

4

1 に答える 1