私は項目を入れ子にし、繰り返し項目のそれぞれの指示文の最初の呼び出しで宣言された継承された内容を繰り返す単純なツリー指示文をAngularで書くつもりです。角度指示文の中で継承された内容を繰り返す
私はこれを試してみました、
angular.module('angularTree',[])
.directive('tree',['$compile',function($compile)
{
return {
scope:{item:"="},
transclude:true,
template:"<div class='tree-item'><ng-transclude></ng-transclude>" +
"<div id='tree-content' class='tree-content'>" +
"<div ng-repeat='child in item.items'>" +
"<tree item='child'><ng-transclude></ng-transclude></tree>" +
"</div>" +
"</div>",
link:function(scope,element,attrs)
{
}
}
}]);
をそして、それはポイントまで動作します。分割された内容でネストされたツリーが作成されます。
問題は、繰り返される子ディレクティブのスコープが、常に宣言された最初のアイテムを指していることです。だから私は私のコントローラでこのような変数を持っている場合...
var item = {name:John, items:[{name:Tony},{name:Jill}]};
そしてこの
<tree item="item"></tree>
のようなディレクティブにそれを渡し、私はアイテムのネストされたリストを取得し、それらはすべて「ジョン」を言います。
これがなぜ起こるか二はちょうど最初と同じスコープを持っているとしているので、私は、見ることができます。..
私の質問は、私は子要素にトランスクルードコンテンツを繰り返すことについては行くだろうか...ですしかし、トップノードではなく子オブジェクトを指すスコープを使用していますか?
$ compile関数とtransclude関数を使用してみましたが、これを実行する方法が見つかりませんでした。
ありがとうございました
をこのコードはアスカーの問題を解決するかもしれないが、動作し、それとどのようなアスカの違いは何であるかを説明するのが好ましいだろう試しました。 – dorukayhan
私は質問者コードの重要な部分を変更せず、いくつかの例を追加しました。何が出力されるでしょうか。それを明確にしようとしました。 –
ステファンありがとうございます。あなたはng-repeat内で{{item.name}}がうまく動作するのは間違いありません。問題は、2番目の内のコンテンツです。両方の要素で、 'item'は常に、子供ではなく元の項目を指します。 2番目のに、現在のアイテムではなく子アイテムに自身をバインドするように指示する方法が必要です。 –
Toby