分離スコープを使用したディレクティブがあり(他の場所でディレクティブを再利用できるようにするため)、このディレクティブを。で使用するとng-repeat
、機能しません。
このトピックに関するすべてのドキュメントとStackOverflowの回答を読み、問題を理解しました。私はいつもの落とし穴をすべて避けたと思います。
ng-repeat
したがって、ディレクティブによって作成されたスコープが原因でコードが失敗することを理解しています。私自身のディレクティブは、分離スコープを作成し、親スコープ内のオブジェクトへの双方向のデータバインディングを実行します。私のディレクティブは、このバインドされた変数に新しいオブジェクト値を割り当てます。これは、私のディレクティブが使用されていない場合ng-repeat
(親変数が正しく更新されている場合)に完全に機能します。ただし、を使用するng-repeat
と、割り当てによってng-repeat
スコープ内に新しい変数が作成され、親変数は変更を認識しません。これはすべて、私が読んだ内容に基づいて予想どおりです。
また、特定の要素に複数のディレクティブがある場合、1つのスコープのみが作成されることも読みました。またpriority
、各ディレクティブにaを設定して、ディレクティブが適用される順序を定義できます。ディレクティブは優先度で並べ替えられ、コンパイル関数が呼び出されます( http://docs.angularjs.org/guide/directiveでpriorityという単語を検索してください)。
そのため、優先度を使用して、ディレクティブが最初に実行され、最終的に分離スコープが作成されるようにしたいと考えていましたng-repeat
。実行すると、親スコープからプロトタイプを継承するスコープを作成する代わりに、分離スコープを再利用します。ng-repeat
ドキュメントには、そのディレクティブは優先度レベルで実行されると記載されています1000
。1
優先度が高いのか低いのかは明確ではありません。ディレクティブで優先度を使用した場合1
、違いはなかったので、試してみ2000
ました。しかし、それは事態をさらに悪化させます。私の双方向バインディングはになりundefined
、私のディレクティブは何も表示しません。
私は自分の問題を示すためにフィドルを作成しました。priority
ディレクティブの設定をコメントアウトしました。名前オブジェクトのリストと、名前オブジェクトの名前フィールドと名前フィールドを表示するというディレクティブがありname-row
ます。selected
表示されている名前をクリックすると、メインスコープに変数を設定してほしい。名前の配列である変数は、双方向のデータバインディングを使用selected
してディレクティブに渡されます。name-row
メインスコープの関数を呼び出すことでこれを機能させる方法を知っています。selected
また、別のオブジェクトの内側にあり、外側のオブジェクトにバインドすると、動作することもわかっています。しかし、私は現時点ではそれらの解決策には興味がありません。
代わりに、私が持っている質問は次のとおりです。
ng-repeat
親スコープからプロトタイプ的に継承するスコープを作成せず、代わりにディレクティブの分離スコープを使用させるにはどうすればよいですか?2000
ディレクティブの優先度が機能しないのはなぜですか?- Batarangを使用して、どのタイプのスコープが使用されているかを知ることは可能ですか?