Angular.js ng-repeat跨多个元素

时间:2013-06-03 15:13:21

标签: javascript jquery angularjs angularjs-ng-repeat

此问题已部分解决:Angular.js ng-repeat across multiple tr's

然而,这实际上只是一种解决方法,它实际上并没有解决核心问题,即:如何在没有包装器的情况下跨多个元素使用ng-repeat?

例如,jquery.accordion要求你重复一个h3和div元素,用ng-repeat怎么做呢?

3 个答案:

答案 0 :(得分:157)

我们现在对此有适当的支持,请参阅:

AngularJs Commmit

通过此更改,您现在可以执行以下操作:

<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>

答案 1 :(得分:21)

要回答上面关于表格中超过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示例

答案 2 :(得分:3)

更新:此答案已过时。请参阅@IgorMinar答案并使用标准ng-repeat-startng-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); 
    }
})

第二个选项是使用更新的角度源代码来启用注释样式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>