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

Posted

技术标签:

【中文标题】使用角度 ng-repeat 在一列中添加多行【英文标题】:add multiple rows in one column using angular ng-repeat 【发布时间】:2015-09-04 01:50:18 【问题描述】:

我想使用 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> 

如何使用角度在一列中插入多行

【问题讨论】:

先展平阵列,然后在展平阵列上运行中继器。 【参考方案1】:

使用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>Ssubject.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>Ssubject.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">Ssubject.id</div>
    </td>
</tr>

【讨论】:

感谢您的回答我已经编辑了我的问题并解释了我想要生成什么样的 html 表。您在 td 中添加 div 但我想在 td @Donal 中添加行 @AminaYousuf 好的,我能够使用 ng-repeat-start 和 ng-repeat-end 实现您想要的。【参考方案2】:

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

w3schools这是最好的网络开发资源之一。

【讨论】:

rowspan 将如何遍历 user.subjects 中的主题? ;-) rowspan 标签并使用 Angular 遍历主题。 rowspan 只是布局。您也可以使用我上面的答案。 不,我只是在弄乱你的选择。由于rowspan没有做他要求帮助的所有事情。如果他将 user.subjects 迭代嵌套在 1 个 td 中,也没有必要使用 rowspan(根据他的问题是他想要实现的目标) @msinnes 对 rowspan 的看法是正确的。如果我将 id 的列 rowspan 设置为我的主题长度,然后在 td 中添加多行,我尝试过但无法做到。 它会起作用,但@Donal 的答案更容易编码。我会坚持下去。严格地用一张桌子来做会有点复杂。【参考方案3】:

使用div你也可以做到

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

【讨论】:

我不想添加 div 我想在 td @Flash 中添加行【参考方案4】:

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>Ssubject.id</td>
        <td>subject.name</td>
    </tr>
</tbody>

【讨论】:

以上是关于使用角度 ng-repeat 在一列中添加多行的主要内容,如果未能解决你的问题,请参考以下文章

ng-repeat 中的角度验证不起作用

没有 ng-repeat 的角度过滤器列表

在角度 ng-repeat 中使用基础的下拉菜单

如何在模态关闭时刷新 ng-repeat?

角度 ng-repeat 用于逗号分隔的字符串

移动由 ng-repeat 创建的 angularJS 元素