带有ng-repeat和table html的嵌套数组

时间:2015-03-28 18:43:08

标签: javascript html angularjs angularjs-ng-repeat ng-repeat

我想把这个json放到HTML表中。

    "columns" : [ 
    {
        "id" : 0,
        "column_name" : "Column 1",
        "cards" : [ 
            {
                "id" : 0,
                "task" : "Task 1"
            }, 
            {
                "id" : 1,
                "task" : "Task 2"
            }
        ]
    }, 
    {
        "id" : 1,
        "column_name" : "Column 2",
        "cards" : [ 
            {
                "id" : 0,
                "task" : "Task 3"
            }
        ]
    }]

我已经在SO上做了很多搜索,但却找不到为什么它没有按照我的预期行事。

https://jsfiddle.net/6nh100ca/9/

这就是我所期待的。

**Column 1 | Column 2**
Task 1   | Task 3
Task 2   | 

https://stackoverflow.com/a/20063394/3279550 http://www.bennadel.com/blog/2456-grouping-nested-ngrepeat-lists-in-angularjs.htm https://stackoverflow.com/a/26607425/3279550

这就是我所拥有的

    <table >
        <thead >
            <tr>
                <th ng-repeat="column in entity.columns">{{column.column_name}}</th>
            </tr>
        </thead>
        <tbody ng-repeat="column in entity.columns" >
            <tr ng-repeat="card in column.cards">
                <td >{{card.task}}</td>
            </tr>
        </tbody>
    </table>

2 个答案:

答案 0 :(得分:3)

根据您的示例数据,

column.columnName应该是column.column_name,在您ng-repeat之后data,您将实际拥有第一ng-repeat tbody } tr&amp;然后另一个将出现在<table > <thead > <tr> <th ng-repeat="column in entity.columns">{{column.columnName}}</th> </tr> </thead> <tbody ng-repeat="column in entity.columns" > <tr ng-repeat="card in column.cards"> <td >{{card.task}}</td> </tr> </tbody> </table> 上。当我有小数据集时,我更喜欢这种方法。对于更大的数据集,@ Tiago给出的答案很好。

{{1}}

答案 1 :(得分:3)

如果您想坚持手动创建自己的<table>,则需要预处理数据对象以适应行逻辑。尝试this fiddle

之类的内容

在控制器中添加:

 $scope.rowColumns = [];
    $scope.columns.forEach(function(column, columnIndex){
        column.cards.forEach(function (card, rowIndex){
            if (!$scope.rowColumns[rowIndex])
                $scope.rowColumns[rowIndex] = [];
            $scope.rowColumns[rowIndex][columnIndex] = card;
        });
    });
    console.log($scope.rowColumns);

然后在你的html中添加:

   <tr ng-repeat="row in rowColumns">
      <td ng-repeat="cell in row">
           {{cell.task}}
      </td>
   </tr>