【问题标题】:Dynamic rowspan in angular角度的动态行跨度
【发布时间】:2019-04-23 16:58:25
【问题描述】:

人数和他们的手机号码是动态的。我需要在表格中显示这个。

数据可以包含任意数量的 pname 和手机号码。

dataList = [
 {
  pname: "abc",
  numbers: [{mobile1: 123, mobile2: 234}]
 },
{
  pname: "mno",
  numbers: [{mobile1: 125, mobile2: 237}]
 }
]

模板

<tr *ngFor="let data of dataList">
 <td  [attr.rowspan]="data.numbers.lenght">data.pname</td>
 <td>data.numbers</td> // Here how do I show all mobile numbers of the person.
</tr>

预期输出如下代码。

table, th, td {
    border: 1px solid black;
}
<table>
  <tr>
    <th>Pname</th>
    <th>Numbers</th>
  </tr>
  <tr>
    <td rowspan="2">Abc</td>
    <td>123</td>
  </tr>
  <tr>
    <td>234</td>
  </tr>
  <tr>
    <td rowspan="2">Mno</td>
    <td>125</td>
  </tr>
  <tr>
    <td>237</td>
  </tr>
</table>

我面临的问题是我需要在每次运行 *ngFor 之后添加 tr 并且 tr 的数量将取决于 numbers 数组的长度以使行跨度。

【问题讨论】:

    标签: html angular


    【解决方案1】:

    你可以像下面那样做

    <table>        
        <ng-container *ngFor="let data of dataList">    
            <tr>
                <td [attr.rowspan]="data.numbers.length">{{data.pname}}</td>
                <td>{{data.numbers[0]}}</td>
            </tr>
            <ng-container *ngFor="let number of data.numbers; let i= index;">
                <tr *ngIf="i!=0">
                    <td>{{number}}</td>
                </tr>
            </ng-container>
        </ng-container>
    </table>
    

    But datalist 必须采用以下格式,即数字必须是数组

    dataList = [
     {
      pname: "abc",
      numbers: [123, 234]
     },
    {
      pname: "mno",
      numbers: [125,  237]
     }
    ]
    

    【讨论】:

    【解决方案2】:

    简单。

    您不需要索引和嵌套的 ng-container。

    <table>
        <ng-container *ngFor="let data of dataList">
            <tr>
                <td [attr.rowspan]="data.numbers.length + 1">{{data.pname}}</td>
            </tr>
            <tr *ngFor="let number of data.numbers;">
              <td>{{number}}</td>
            </tr>
        </ng-container>
    </table>
    

    工作示例。 https://stackblitz.com/edit/angular-yrose8?file=src%2Fapp%2Fapp.component.html

    【讨论】:

      【解决方案3】:

      使用两个*ngFor很简单,避免data.numbers[0]重复代码。

      <table>        
        <ng-container *ngFor="let data of dataList">    
         <ng-container *ngFor="let number of data.numbers; let i= index;">
           <tr>
              <td *ngIf="i==0" [attr.rowspan]="data.numbers.length">{{data.pname}}</td>
              <td>{{number}}</td>
           </tr>
         </ng-container>
        </ng-container>
      </table>
      

      【讨论】:

        猜你喜欢
        • 2019-01-07
        • 2020-09-14
        • 2021-06-05
        • 2020-03-08
        • 2017-09-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-12-07
        相关资源
        最近更新 更多