2013-08-09 4 views
15

Hallo ich habe einen einfachen Anwendungsfall für ng-repeat-Start und Ende und funktioniert gut, das Problem erscheint, wenn ich hinzufügen möchte eine innere ng-Wiederholung. Hier ist der mein Codeangularjs: ng-repeat-start und ng-repeat-end mit inner ng-repeat

<tr ng-repeat-start="obj in rows" > 
    <td ng-repeat="e in obj.row">{{e}}</td> 
</tr> 
<tr ng-repeat-end> 
    <td colspan="4">{{obj.description}}</td> 
<tr> 

Die innere ng-Repeat in td Element nicht funktioniert, ich bin der ngRepeat Kommentar zu sehen, wenn ich den HTML-Quellcode untersuchen, aber die td-Elemente erstellt werden, nicht zu werden.

<!-- ngRepeat: e in obj.row --> 

Meine hässliche Abhilfe (vorausgesetzt, dass ich die Größe dieses Vektors weiß) ist:

<tr ng-repeat-start="obj in rows" > 
    <td>{{obj.row[0]}}</td> 
    <td>{{obj.row[1]}}</td> 
    <td>{{obj.row[2]}}</td> 
    <td>{{obj.row[3]}}</td> 
</tr> 
<tr ng-repeat-end> 
    <td colspan="4">{{obj.description}}</td> 
<tr> 
+0

Ist es, weil die Vorlage ungültig HTML ist? Ich sehe die Endung '' Tag ist eigentlich '' –

Antwort

17

Ich bin mir nicht sicher, ob Sie angular 1.1.6 verwenden oder nicht, da ng-repeat-start und ng-repeat-end in 1.1.5 oder 1.0.7 noch nicht verfügbar sind.

Sie müssen jedoch nicht die neuen Direktiven verwenden, um dies zu erreichen. Sie können einfach es wie folgt implementieren jetzt für:

<table> 
    <tbody ng-repeat="obj in rows"> 
     <tr ng-repeat="e in obj.row"> 
      <td>{{e}}</td> 
     </tr> 
     <tr> 
      <td colspan="4">{{obj.description}}</td> 
     <tr> 
    </tbody> 
</table> 

Sie ng-repeat-start und ng-repeat-end verwenden können es neu zu implementieren, wenn AngularJS 1.1.6 Version offiziell freigegeben wird.

Demo

+0

Ja, ich benutze Version 1.1.6. Ich mag deine Lösung Ich habe es vorher versucht und es hat funktioniert. Was ich nicht mag, sind die vielen tbody-Elemente, deshalb versuche ich dieses neue Feature. Danke für Ihre Antwort! – Jime

+0

@Jime Sie brauchen nur einen 'tbody'. – zsong

+0

+1 für die Demo-Schaltfläche. tolle Sachen :) –

1

sollten Sie in der Lage sein, indexbasierte Iterationen zu verwenden, das umgehen:

<tr ng-repeat-start="obj in rows" > 
    <td ng-repeat="e in obj.row">{{obj.row[$index]}}</td> 
</tr> 
<tr ng-repeat-end> 
<!-- ... --> 
+0

das Problem ist, dass die ng-repeat-Direktive wird nicht aufgelöst, entweder ich benutze indexbasierte Iteration oder e-Objekt – Jime

1

ich denke, es ist etwas falsch mit Ihrer Datenstruktur sein könnte. Mit Angular 1.2.1 das für mich arbeitet

<div ng-app="myApp" ng-controller="myCtrl"> 
    <div class="h" ng-repeat-start="val in data">{{val.title}}</div> 
    <div ng-repeat="con in val.content"> 
     {{con}} 
    </div> 
    <div class="b" ng-repeat-end>footer</div> 
</div> 

Siehe jsFiddle