ng-repeat angular js有问题

时间:2015-06-29 11:15:34

标签: javascript html angularjs

我有一个角度ng重复,如波纹管,

<div class="row" >
<div class="col-md-6" ng-repeat="(index,data) in mydata"> 
  <-- my content -->
</div> 
</div>

这将创建如下所示的输出

<div class="row" >
<div class="col-md-6" ng-repeat="(index,data) in mydata"> 
  <-- my content -->
</div> 
 <div class="col-md-6" ng-repeat="(index,data) in mydata"> 
  <-- my content -->
</div> 
 <div class="col-md-6" ng-repeat="(index,data) in mydata"> 
  <-- my content -->
</div> 
-----------------------
----------------- Etc.
</div>

但我还需要重复<div class="row" >,每行包含两个<div class="col-md-6"

此输出需要

<div class="row" >
<div class="col-md-6" ng-repeat="(index,data) in mydata"> 
  <-- my content -->
</div> 
 <div class="col-md-6" ng-repeat="(index,data) in mydata"> 
  <-- my content -->
</div> 
</div>
 <div class="row" >
<div class="col-md-6" ng-repeat="(index,data) in mydata"> 
  <-- my content -->
</div> 
 <div class="col-md-6" ng-repeat="(index,data) in mydata"> 
  <-- my content -->
</div> 
</div>
<div class="row" >
<div class="col-md-6" ng-repeat="(index,data) in mydata"> 
  <-- my content -->
</div> 
 <div class="col-md-6" ng-repeat="(index,data) in mydata"> 
  <-- my content -->
</div> 
</div>
------- Etc

是否可以使用ng-repeat

执行此操作

4 个答案:

答案 0 :(得分:4)

正如评论中所述,如果您希望行与mydata中的每个元素重复,则需要将ng-repeat放在包含行的<div>上。

由此决定是否要对内部<div>进行硬编码:

<div class="row" ng-repeat="data in mydata">
  <div class="col-xs-6"> {{data.index}} </div>
  <div class="col-xs-6"> {{data.value}} </div>
</div>

或在其上使用其他ng-repeat。

<div class="row" ng-repeat="(index,data) in mydata">
  <div class="col-xs-6" ng-repeat="i in data"> {{i}} </div>
</div> 

其中mydata是具有以下结构的json数组:

$scope.mydata = [{index:0,value:'hello'},
                 {index:1,value:'hello1'},
                 {index:2,value:'hello2'}
                ]

这里是plunkr

<强>更新

如果您有以下数据,

$scope.mydata = [{value:'hello0'},
                 {value:'hello1'},
                 {value:'hello2'},
                 {value:'hello3'}];

并且您希望将其显示为

  

hello0 hello1

     

hello2 hello3

在视图中

,您需要检查偶数迭代中出现的元素,并在$index$index+1处打印元素。我使用了$even。但您也可以创建自定义过滤器。

<div class="row" ng-repeat="data in mydata">
  <div ng-if="$even">
    <div class="col-xs-6" > {{mydata[$index].value}} </div>
    <div class="col-xs-6" > {{mydata[$index + 1].value}} </div>
  </div>
</div>    

继续更新plunker

答案 1 :(得分:0)

创建指令:

angular.module(....)
.directive('myRows',function(){
  return {
    restrict : 'A',
    template : '<div class="row"><div class="col-md-6" ng-repeat="(index,data) in mydata"><-- my content --></div></div>'
  };
});    

这里假设mydata是在周围控制器的范围内定义的。 在你的html中使用它:

<div data-my-rows><div>

答案 2 :(得分:0)

所以,你现在有两个答案可以正确解决你的问题,并会产生你要求的结果,但我想给你一些关于你的Bootstrap结构的建议(虽然是未经请求的)。

在Bootstrap中,为每12个网格单元重复行是完全可以接受的。实际上,如果要同时使用多个响应列类,例如使用col-lg-4和col-md-6在大视口上生成3列,在中型视口上生成2列,则不能在重复内容之间插入行。

由于col类使用float和percentages,因此您不必担心“终止”该行。元素将简单地相互浮动,最多12个网格单位,然后开始一个新的自然水平“行”。这就是Bootstrap响应网格的工作原理。

您应该将行用于两个目的:

  1. 将列嵌套在列内。请参阅我的answer here了解一下 这个主题的直观解释。或
  2. 创建列的水平。这样做的目的是将元素组合在一起并清除后续列的列浮动。
  3. 我所说的是你的初始ng-repeat结构更好,并且会为你提供更灵活的结果。

答案 3 :(得分:0)

是的,ng-repeat可以做到这一点。

以下是我项目的示例代码

<tbody>
<tr ng-repeat="proj in projects>
<td>
{{proj.projectID}}
</td>
<td>
 {{proj.projectName}}
</td>
<td>
{{proj.project.start date  | date:'mediumDate'}}
 </td>
  <td>
  {{proj.projectStatus}}
  </td>
 </tr>
  </tbody>

我希望这会有所帮助