(他の場所でディレクティブを再利用できるように)分離スコープを持つディレクティブがありng-repeat、このディレクティブをで使用すると、機能しません。
このトピックに関するすべてのドキュメントとスタックオーバーフローの回答を読み、問題を理解しました。通常の問題をすべて回避できたと思います。
したがって、ng-repeatディレクティブによって作成されたスコープが原因でコードが失敗することを理解しています。私自身のディレクティブは、isolateスコープを作成し、親スコープ内のオブジェクトに双方向のデータバインディングを行います。私のディレクティブは、このバインドされた変数に新しいオブジェクト値を割り当てます。これは、私のディレクティブを使用しない場合ng-repeat(親変数が正しく更新される場合)に完全に機能します。ただし、ng-repeatでは、割り当てによってng-repeatスコープ内に新しい変数が作成され、親変数には変更が反映されません。これはすべて、私が読んだ内容に基づいて予想どおりです。
また、特定の要素に複数のディレクティブがある場合、1つのスコープのみが作成されることも読みました。そしてpriority、各ディレクティブにa を設定して、ディレクティブが適用される順序を定義できます。ディレクティブは優先度でソートされてから、それらのコンパイル関数が呼び出されます(http://docs.angularjs.org/guide/directiveで優先度という単語を検索してください)。
したがって、優先順位を使用してディレクティブが最初に実行され、最終的に分離スコープが作成されるようにし、ng-repeat実行時に親スコープからプロトタイプを継承するスコープを作成する代わりに分離スコープを再利用できることを望んでいました。ng-repeatドキュメントは、優先レベルでそのディレクティブの実行と述べています1000。1優先度が高いか低いかは不明です。1ディレクティブで優先度を使用しても違いはないので、試してみました2000。しかし、それは事態をさらに悪化させます。私の双方向のバインディングがなりundefined、私のディレクティブは何も表示しません。
私は自分の問題を示すためのフィドルを作成しました。priorityディレクティブの設定をコメントアウトしました。名前オブジェクトのリストと、名前オブジェクトのname-row姓名フィールドを表示するという名前のディレクティブがあります。表示された名前をクリックselectedすると、メインスコープに変数を設定して欲しい。名前の配列、selected変数はname-row双方向のデータバインディングを使用してディレクティブに渡されます。
メインスコープで関数を呼び出すことでこれを機能させる方法を知っています。また、selectedが別のオブジェクトの内部にあり、外部オブジェクトにバインドすると、問題が発生しないことも知っています。しかし、私は現時点ではそれらの解決策には興味がありません。
代わりに、私が持っている質問は次のとおりです。
- どうやって防ぐか
ng-repeat親スコープからプロトタイプ的に継承するスコープを作成せずに、ディレクティブの分離スコープを使用するにはですか? - なぜ優先レベルなのか
2000ディレクティブのしないのですか? - バタランを使用して、どのタイプのスコープが使用されているかを知ることは可能ですか?
ng-repeat。スタンドアロンディレクティブとを混在させることができると便利ng-repeatです。続行するには...
ng-repeatべきではありません。ng-repeatスコープを持つことは、典型的なユースケースでは意味があるので、変更することはお勧めしません。代わりに、アレックスオズボーンの回答でコメントしたようにng-repeat、独自のスコープを作成しないで、それに基づいて繰り返しディレクティブを作成すると思います。これは、独自の分離スコープを持つディレクティブの繰り返しに使用できます。続行するには...
ng-repeatか、カスタムのスコープレスの繰り返しディレクティブを使用するかを知る必要があります。「呼び出し元」がこれを知っていても大丈夫だと思いますが、「呼び出し先」(指示が繰り返されている)がそれが繰り返されているかどうかを知ることは許されていません。続行するには...







scope: trueため、ディレクティブに使用することをお勧めします。(まだお持ちでない場合)も参照してください。stackoverflow.com/ questions / 14914213 / … また、ディレクティブが複数の場所で使用されるからといって、自動的に分離スコープを使用する必要があるわけではありません。