この質問はここで部分的に対処されています: Angular.js ng-repeat across multiple tr's
しかし、それは実際には単なる回避策であり、コアの問題に実際には対処していません。つまり、ラッパーなしで複数の要素でng-repeatを使用する方法はありますか?
たとえば、jquery.accordionでは、h3要素とdiv要素を繰り返す必要がありますが、ng-repeatでこれを行うにはどうすればよいでしょうか?
現在、これを適切にサポートしています。以下をご覧ください。
この変更により、次のことができるようになりました。
<table>
<tr ng-repeat-start="item in list">
<td>I get repeated</td>
</tr>
<tr ng-repeat-end>
<td>I also get repeated</td>
</tr>
</table>
テーブル内の2レベル以上のng-repeatに関する上記のAndreの質問に答えるには、複数のng-repeat-startを使用してこれを達成できます。
<tr ng-repeat-start="items in list">
<td>{{items.title}}</td>
</tr>
<tr ng-repeat-start="item in items">
<td>{{item.subtitle}}</td>
</tr>
<tr ng-repeat-end ng-repeat="value in item.values">
<td>{{value.col1}}</td>
<td>{{value.col2}}</td>
</tr>
<tr ng-repeat-end></tr>
plunker の例を次に示します
UPDATE:この答えは時代遅れです。 @IgorMinarの回答を参照し、標準のng-repeat-start
およびng-repeat-end
ディレクティブを使用してください。
次の2つのオプションがあります。
最初のオプションは、いくつかのタグをレンダリングしてソースタグを置き換えるディレクティブを作成することです( jsfiddle )
<div multi ></div> angular.module('components').directive('multi', function ($compile) { return { restrict: 'A', scope : { first : '=', last : '=', }, terminal:true, link: function (scope, element, attrs) { var tmpl = '', arr = [0,1,2,3] // this is instead of your repeater for (var i in arr) { tmpl +='<div>another div</div>' } var newElement = angular.element(tmpl); $compile(newElement)(scope); element.replaceWith(newElement); } })
2番目のオプションは、コメントスタイルngRepeatディレクティブを有効にするangularの更新されたソースコードを使用することです(- plnkr )
<body ng-controller="MainCtrl"> <div ng-init="arr=[0,1,2]" ></div> <!-- directive: ng-repeat i in arr --> <div>{{i}}</div> <div>{{ 'foo' }}</div> <!-- /ng-repeat --> {{ arr }} <div ng-click="arr.Push(arr.length)">add</div> </body>