此问题已部分解决:Angular.js ng-repeat across multiple tr's
然而,这实际上只是一种解决方法,它实际上并没有解决核心问题,即:如何在没有包装器的情况下跨多个元素使用 ng-repeat?
例如,jquery.accordion 要求你重复一个 h3 和 div 元素,用 ng-repeat 怎么能做到这一点?
我们现在对此有适当的支持,请参阅:
AngularJs 提交
通过此更改,您现在可以执行以下操作:
<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>
要回答 Andre 关于表格中超过 2 个级别的 ng-repeat 的问题,您可以使用多个 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 示例
更新:此答案已过时。请参阅@IgorMinar 答案并使用标准 ng-repeat-start
和 ng-repeat-end
指令。
有两种选择:
第一个选项是创建将呈现多个标签并替换源标签的指令 (jsfiddle)
angular.module('components').directive('multi', function ($compile) { return { restrict :'A',范围:{第一个:'=',最后一个:'=',},终端:true,链接:函数(范围,元素,attrs){var tmpl ='',arr = [0,1, 2,3] // 这不是你的转发器 for (var i in arr) { tmpl +='
element.replaceWith(newElement);
将用您需要的内容替换 wrapper 标记。你也可以在你的指令中有循环,并在 tmpl 中添加尽可能多的标签。