angularjs:ng-repeat-start和ng-repeat-end with inner ng-repeat

时间:2013-08-09 21:44:57

标签: angularjs angularjs-ng-repeat

您好我有一个简单的ng-repeat-start和end用例,工作得很好,当我想添加内部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>

内部ng-repeat到td元素不起作用,当我检查html源代码时,我看到了ngRepeat注​​释,但是没有创建td元素。

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

我丑陋的解决方法(假设我知道该向量的大小)是:

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

3 个答案:

答案 0 :(得分:18)

我不确定您是否使用了角度1.1.6,因为ng-repeat-startng-repeat-end在1.1.5或1.0.7中不可用。

但是,您实际上不必使用新指令来实现这一点。您现在可以像这样简单地实现它:

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

当AngularJS 1.1.6版本正式发布时,您可以使用ng-repeat-startng-repeat-end重新实现它。

Demo

答案 1 :(得分:2)

我认为您的数据结构可能有问题。使用Angular 1.2.1 这对我有用

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

请参阅jsFiddle

答案 2 :(得分:1)

您应该能够使用基于索引的迭代来绕过它:

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