Angular.js ng-repeat через несколько элементов
Этот вопрос был частично рассмотрен здесь: Angular.js ng-repeat через несколько tr
Однако это просто практический подход, на самом деле он не затрагивает основную проблему, а именно: как можно использовать ng-repeat для нескольких элементов без оболочки?
Например, jquery.accordion требует повторить элемент h3 и div, как это можно сделать с помощью ng-repeat?
Ответы
Ответ 1
Теперь у нас есть соответствующая поддержка, см.:
с этим изменением, которое вы теперь можете сделать:
<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
Чтобы ответить на вопрос Андре выше на более чем 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
Ответ 3
ОБНОВЛЕНИЕ. Этот ответ устарел. Обратитесь к @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>