私はJavascriptプログラミングにかなり慣れていないので、AngularJSにしか触れていません。それを評価するために、簡単なメモ アプリケーションを作成することにしました。モデルは非常にシンプルで、各メモにラベル、テキスト、およびタグのリストがあるメモのリストです。ただし、ネストされたディレクティブの分離されたスコープ間でデータを渡す際に問題が発生しました。
3 つのディレクティブ、notes、note、tagger (同じ名前の新しい要素を定義する) があります。それらのそれぞれは、分離されたスコープを使用しています。
notes ディレクティブは ng-repeat を使用して、そのノートのそれぞれを note 要素で「レンダリング」します。
note ディレクティブは tagger 要素を使用して、タグのリストを「レンダリング」します。
note ディレクティブは、スコープを定義します: { getNote: "&", ... } ノートのリストからノート インスタンスをノート コントローラー/ディレクティブに渡すために。getNote(index) 関数は、note ディレクティブのリンク関数で呼び出されます。これはうまくいきます!
tagger ディレクティブはスコープを定義します: { getTags: "&", ... } 特定のノートのタグのリストを tagger コントローラー/ディレクティブに渡すために。getTags 関数は tagger ディレクティブのリンク関数で呼び出されます。これは動作しません!
私が理解しているように、問題は、ディレクティブのリンク関数が一貫性のない順序で呼び出されることです。アプリケーションをデバッグすると、リンク関数が次の順序で呼び出されることがわかります。
notes ディレクティブの link 関数 (notes スコープに getNote 関数を追加)
最初のノートの tagger ディレクティブの link 関数 (親ノート スコープで getTags を呼び出す) 関数
最初のノート ディレクティブのリンク関数 (getTags をスコープに追加) (親のノート スコープで getNote を呼び出す)
2 番目のノートの tagger ディレクティブのリンク関数 (親ノート スコープで getTags を呼び出す) 関数
2 番目のノート ディレクティブのリンク関数 (getTags をスコープに追加) (親のノート スコープで getNote を呼び出す)
#2 では、最初のノートのスコープにはまだ getTags 関数がないため、これは機能しません。
単純な例はPlunkerにあります。
したがって、私の質問は次のようになります。ネストされたディレクティブでリンク関数が呼び出される順序を決定するものは何ですか。
(タガーディレクティブのgetTagsで$watchを使用して問題を解決しました...)
よろしく