2016-08-23 36 views
14

使用Angular 2 ngFor我正在创建一个表。ngFor创建2行

我的问题是my data array包含elements,使得每个元件应在表中创建2个连续行(使用不同的字段,第二行是可折叠的更多的数据)

<tbody> 
    <tr *ngFor="let element of data; let i = index"> 
     <th>...<th> 
     ... 
     <td>...<td> 
    </tr> 
</tbody> 

问题是,tbody不允许在<tr>旁边的任何属性。

我正在寻找类似

<tbody> 
    <template *ngFor="let element of data; let i = index"> 
     <tr>...</tr> //row 1 
     <tr>...</tr> //row 2 
    </template> 
</tbody> 

回答

20

与语法略有不同存在:

<template ngFor let-element [ngForOf]="data" let-i="index"> 
    <tr>...</tr> //row 1 
    <tr>...</tr> //row 2 
</template> 

<ng-container *ngFor="let element of data let i=index"> 
    <tr>...</tr> //row 1 
    <tr>...</tr> //row 2 
</ng-container> 

更新> = 4.0.0 <template>改为<ng-template>

<ng-template ngFor let-element [ngForOf]="data" let-i="index"> 
    <tr>...</tr> //row 1 
    <tr>...</tr> //row 2 
</ng-template> 
+0

感谢。不明白为什么语法不同。我确实在文档中看到了ithis语法,并且尝试使用* ngFor,它不起作用(打字错误)。另外我的IDE抱怨说这里的语法是“不允许的”,并且没有自动完成。 – royB

+0

https://angular.io/docs/ts/latest/guide/template-syntax.html#!#star-template我不知道IDE。我在答案中显示的是规范的语法。 '* ngFor'是句法糖。 –

+0

前几天我需要这个,但是我通过bootstrap 3行和col-xx-y类实现了它。第二行由第一行激活,它将作为深入查询表。基本上,我试图避免“瓦解”整个项目的各种方法,并希望在所有视图中保持统一。 –

1

我面临同样的问题,我没有找到任何好的解决方案。但经过深入研究,我发现这个ng容器,它工作得很好。 U可以看到它在行动波纹管

https://plnkr.co/edit/F8ohXKLHvvbHXAqGESQN?p=preview

<ng-container *ngFor="let obj of posts"> 
     <tr> 
      <td> 
       <button (click)="openCloseRow(obj.id)"> 
        <span *ngIf="rowSelected!=obj.id; else close">Open</span> 
         <ng-template #close> 
         <span>Close</span> 
         </ng-template> 
       </button> 
      </td> 
      <td>{{obj.date}}</td> 
      <td> 
       {{obj.subject}} 
      </td> 
      <td>{{obj.numComents}}</td> 
     </tr> 
     <tr *ngIf="rowSelected==obj.id"> 
      <td></td> 
      <td colspan="4"> 
       <table class="table table-striped"> 
        <thead> 
         <tr>         
          <th style="width:15%;">Comment</th> 
         </tr> 
        </thead> 
        <tbody> 
         <tr *ngFor="let q of obj.comments">         
          <td style="width:15%;">{{q}}</td> 
         </tr> 
        </tbody> 
       </table> 
      </td> 
     </tr> 
     </ng-container> 
1
<table> 
     <tr> 
      <th>ID#</th> 
      <th>Name</th> 
      <th>Grade</th> 
      <th>Power</th> 
     </tr> 
     <tr *ngFor="let object_name of object_array"> 
      <td>{{object_name.id}}</td> 
      <td>{{object_name.name}}</td> 
      <td>{{object_name.grade}}</td> 
      <td>{{object_name.power}}</td> 
     </tr> 
</table> 
+0

感谢您使用此代码段,这可能会提供一些有限的即时帮助。一个[正确的解释将大大提高其长期价值](/ meta.stackexchange.com/q/114762/350567)通过显示*为什么*这是一个很好的解决方案,并会使它对未来更有用有其他类似问题的读者。请[编辑]你的答案以添加一些解释,包括你所做的假设。 – iBug