使用角度ng-repeat在一列中添加多行

时间:2015-06-18 12:16:05

标签: javascript json angularjs html5

我想使用json对象生成表内容。我正在使用ng-repeat在表中插入多行。但我必须生成如下表格。

    --------------
    ID | subjects 
    --------------
       | S1  
    1  | S2  
       | S3  
    --------------
       | S4  
    2  | S5  
       | S6
    --------------


my angular code is: 
 <tr ng-repeat = "user in users">
    <td>{{user.id}}</td>
    <td>{{user.subject}}</td>
</tr>

我的json对象是:

user:[
  {id:1 , 
   subjects:[
       {id:1 , name:"eng"} 
       {id:2 , name:"phy"}
   ]
  },
  {id:2 , 
   subjects:[
       {id:1 , name:"eng"} 
       {id:3 , name:"math"}
   ]
  }
]

我想像这样生成html表

 <table>
  <tr>
     <td >ID</td>
     <td>Sub</td>
  </tr>
  <tr>
    <td rowspan="3">1</td>
    <td>S1</td>
  </tr>
  <tr>
    <td>S2</td>
  </tr>
  <tr>
    <td>S3</td>
   </tr> 

如何使用angular

在一列中插入多行

4 个答案:

答案 0 :(得分:9)

使用ng-repeat-startng-repeat-end。例如:

<tr ng-repeat-start="user in users">
    <td rowspan="{{user.subjects.length+1}}">{{user.id}}</td>                    
</tr>
<tr ng-repeat-end ng-repeat="subject in user.subjects">
    <td>S{{subject.id}}</td>
</tr>

以下是一个完整的例子:

var app = angular.module('MyApp', []);
app.controller('MyController', function ($scope) {

    var users = [{
        id: 1,
        subjects: [{
            id: 1,
            name: "eng"
        }, {
            id: 2,
            name: "phy"
        }]
    }, {
        id: 2,
        subjects: [{
            id: 1,
            name: "eng"
        }, {
            id: 3,
            name: "math"
        }, {
            id: 4,
            name: "hist"
        }, 
        {
            id: 5,
            name: "geog"
        }]
    }];

    $scope.users = users;
});
table { border-collapse: collapse; }
td { border: 1px solid Black; }
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<table ng-app="MyApp" ng-controller="MyController">
    <thead>
        <tr>
            <td>ID</td>
            <td>Subjects</td>
        </tr>
    </thead>
    <tbody>
        <tr ng-repeat-start="user in users">
            <td rowspan="{{user.subjects.length+1}}">{{user.id}}</td>                    
        </tr>
        <tr ng-repeat-end ng-repeat="subject in user.subjects">
            <td>S{{subject.id}}</td>
        </tr>
    </tbody>
</table>

另外,在这里工作小提琴:http://jsfiddle.net/donal/r51d5fw5/17/

使用嵌套ng-repeat的替代版本可以使用div来实现,以显示嵌套的主题信息:

<tr ng-repeat="user in users">
    <td>{{user.id}}</td>
    <td>
        <div ng-repeat="subject in user.subjects">S{{subject.id}}</div>
    </td>
</tr>

答案 1 :(得分:0)

rowspan会做你需要的一切。请点击此链接:

w3schools这是用于网站开发的最佳资源之一。

答案 2 :(得分:0)

使用div u也可以

<div ng-repeat = "user in users">
<div> {{user.id}} </div>
  <div ng-repeat = "user1 in users.subjects">
     {{user1.id}} : {{user1.name}}
  <div>
</div>

答案 3 :(得分:0)

Donal的回答很好。 但是我编辑了以展示漂亮的桌子:

<table class="table table-bordered table-hover table-height m-b-xs">
<thead>
    <tr>
        <td>ID</td>
        <td>Subjects</td>
        <td>name</td>
    </tr>
</thead>
<tbody>
    <tr ng-repeat-start="user in users">
        <td rowspan="{{user.subjects.length}}">key {{user.id}}</td>
        <td>S{{ user.subjects[0].id }}</td>
        <td>{{ user.subjects[0].name }}</td>
    </tr>
    <tr ng-repeat-end ng-repeat="subject in user.subjects.slice(1)">
        <td>S{{subject.id}}</td>
        <td>{{subject.name}}</td>
    </tr>
</tbody>