Angular.js ng-重复跨越多个元素

这个问题已经在这里得到了部分解决: Angular.js ng-repeat跨越多个tr

然而,这只是一个解决方法,它实际上并没有解决核心问题,即:如何在不使用包装的情况下使用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> 

要回答安德烈在一个表中超过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> 

这是一个暴徒的例子

更新 :这个答案已经过时了。 请参阅@IgorMinar答案,并使用标准的ng-repeat-startng-repeat-end指令。


有两个选项:

第一个select是创build指令,它将呈现几个标签并replace源标签( 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); } }) 

第二个select是使用更新的angular度的源代码,启用评论样式ngRepeat指令( 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>