Cette question a été en partie traitée ici: Angular.js ng-repeat sur plusieurs tr
Cependant, il ne s'agit en réalité que d'une solution de contournement. Elle ne résout pas le problème principal: comment utiliser ng-repeat sur plusieurs éléments sans wrapper?
Par exemple, jquery.accordion exige que vous répétiez un élément h3 et div, comment peut-on faire cela avec ng-repeat?
Nous avons maintenant un support approprié pour cela, s'il vous plaît voir:
avec ce changement, vous pouvez maintenant faire:
<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>
Pour répondre à la question d'André ci-dessus sur plus de 2 niveaux de ng-repeat dans un tableau, vous pouvez utiliser plusieurs ng-repeat-start pour accomplir cela.
<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>
Voici un exemple plunker
[~ # ~] update [~ # ~] : cette réponse est obsolète. Veuillez consulter la réponse de @IgorMinar et utiliser le standard ng-repeat-start
et ng-repeat-end
directives.
Il y a deux options:
La première option est de créer une directive qui rendra plusieurs balises et remplacera la balise source ( 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); } })
La deuxième option consiste à utiliser le code source mis à jour de angular qui active la directive ngRepeat de style de commentaire ( 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>