Angular.js ng-repeat across multiple elements

后端 未结 3 2174
情书的邮戳
情书的邮戳 2020-11-30 23:13

This question has been partly addressed here: Angular.js ng-repeat across multiple tr's

However that is just a work-around really, it doesn\'t actually address t

相关标签:
3条回答
  • 2020-11-30 23:56

    We now have a proper support for this, please see:

    AngularJs Commmit

    with this change you can now do:

    <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>
    
    0 讨论(0)
  • 2020-12-01 00:00

    To answer Andre's question above on more than 2 levels of ng-repeat in a table, you can use multiple ng-repeat-start to accomplish this.

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

    Here is a plunker example

    0 讨论(0)
  • 2020-12-01 00:06

    UPDATE: This answer is outdated. Please see @IgorMinar answer and use standard ng-repeat-start and ng-repeat-end directives.


    There are two options:

    First option is to create directive that will render several tags and replace source tag (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); 
        }
    })
    

    Second option is to use updated source code of angular that enables comment style ngRepeat directive (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>  
    

    0 讨论(0)
提交回复
热议问题