此问题已在此处部分解决:跨多个tr的Angular.js ng-repeat
但是,这实际上只是一种变通方法,它实际上并未解决核心问题,即:如何在没有包装的情况下跨多个元素使用ng-repeat?
例如,jquery.accordion要求您重复一个h3和div元素,用ng-repeat怎么做?
此问题已在此处部分解决:跨多个tr的Angular.js ng-repeat
但是,这实际上只是一种变通方法,它实际上并未解决核心问题,即:如何在没有包装的情况下跨多个元素使用ng-repeat?
例如,jquery.accordion要求您重复一个h3和div元素,用ng-repeat怎么做?
Answers:
现在,我们对此提供了适当的支持,请参阅:
通过此更改,您现在可以执行以下操作:
<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>
要在一个表中的两个以上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-start
和ng-repeat-end
指令。
有两种选择:
第一种选择是创建指令,该指令将呈现多个标签并替换源标签(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);
}
})
第二种选择是使用更新的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>
element.replaceWith(newElement);
将用您需要的包装标签替换。您也可以在指令中加入循环,并在tmpl中添加所需数量的标签。