如何显示复杂数据或更改ngFor中第一个和最后一个元素的模板?

布达

已经问过类似的问题,但是我的稍有不同。还是我只是没有找到合适的?

我使用的是Angular 10,需要显示父级的复杂数据以及子级列表:

    data = [
      { Name: 'n1', Items: [{ i1: '0000', i2: '000' }] },
      {
        Name: 'n2',
        Items: [
          { i1: '11', i2: '1' },
          { i1: '2', i2: '222222' },
        ],
      },
    ];

HTML:

    <table border=1>
      <head>
        <tr>
          <th rowspan="2">Name</th>
          <th colspan="2">Items</th>
        </tr>
        <tr>
          <th>I1</th>
          <th>I2</th>
        </tr>
      </thead>
      <body>
          <tr *ngFor="let d of data">
            <td>{{ d.Name }}</td>
            <td colspan="2">
              <table border=1>
                <tr *ngFor="let item of d.Items">
                  <td>{{ item.i1 }}</td>
                  <td>{{ item.i2 }}</td>
                </tr>
              </table>
            </td>
          </tr>
        </tbody>
    </table>

明显的问题是,不同数据元素的项目单元格的宽度可能具有不同的宽度。

为了克服这个问题,我想避免在“ items”单元格内创建单独的表,而要使用“ main”表的单元格。例如,如下所示:

    <tbody>
      <ng-container *ngFor="let d of data">
        <tr>
          <td attr.rowspan="{{ d.Items.length }}">{{ d.Name }}</td>
          <ng-container *ngFor="let item of d.Items">
            <tr>
              <td>{{ item.i1 }}</td>
              <td>{{ item.i2 }}</td>
            </tr>
          </ng-container>          
        </tr>
      </ng-container>
    </tbody>

但是,我需要以某种方式“隐藏”第一个”的每个第一项和”的最后一个。

当我写下问题并很好地(对我自己)解释时,我相信我可以通过使用以下思路修改第一个和最后一个记录的''内的'html'来实现目标:

    <tbody>
      <ng-container *ngFor="let d of data">
        <tr>
          <td attr.rowspan="{{ d.Items.length }}">{{ d.Name }}</td>
            <ng-container *ngFor="let item of d.Items; let i=index">
              <ng-container *ngIf=" i !== 0 " >
                <tr>
              </ng-container>                
                <td>{{ item.i1 }}</td>
                <td>{{ item.i2 }}</td>
              <ng-container *ngIf=" i !== d.Items.length-1 " >
                </tr>
              </ng-container>                 
            </ng-container>          
        </tr>
      </ng-container>
    </tbody>

但是这段代码给了我一个错误:

意外的结束标签“ tr”

请告知,如何以这种方式显示复杂数据?或者如何在“ ng-container”中正确隐藏某些标签?

谢谢!

欧文·凯尔文(Owen Kelvin)

我相信以下是您要实现的目标

<table border=1>
    <thead>
        <tr>
            <th rowspan="2">Name</th>
            <th colspan="2">Items</th>
        </tr>
        <tr>
            <th>I1</th>
            <th>I2</th>
        </tr>
    </thead>
    <tbody>
    <ng-container *ngFor="let d of data">
      <ng-container *ngFor="let item of d.Items; let first=first">
        <tr>
          <td  *ngIf='first' [attr.rowspan]='d.Items.length'>{{ d.Name }}</td>
          <td>{{ item.i1 }}</td>
          <td>{{ item.i2 }}</td>
        </tr>
      </ng-container>
    </ng-container>
    </tbody>
</table>

注意这一行[attr.rowspan]='d.Items.length'这样可以确保表格正确对齐

下面是一个stackblitz演示

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

ConcurrentSkipListSet访问第一个和最后一个元素的复杂性

ngFor循环列表中的第一个和最后一个对象

如何从三个相同的元素中隐藏第一个和最后一个元素

仅显示数据中的第一个元素

如何检查数组c ++中的第一个元素和最后一个元素

从sqlite数据库中获取第一个和最后一个元素

如何定位类的第一个和最后一个元素

如何通过XPath选择第一个和最后一个元素?

如何复制向量的第一个和最后一个元素?

R:识别重复组中的第一个和最后一个元素

删除数组中的第一个和最后一个元素

ul列表中的第一个和最后一个VISIBLE元素

NumPy数组中的第一个和最后一个元素

删除行中第一个和最后一个元素的填充

仅在Highcharts中显示第一个和最后一个xAxis标签

如何在数据框列中查找第一个和最后一个元素并修剪这些元素之间的值

如何识别对象数组中链的第一个和最后一个元素

如何在C ++中交换队列的第一个和最后一个元素?

如何截断提示中显示第一个和最后一个文件夹的工作目录?

如何使用php中的多维数组显示从最后到第一个的数据

如何删除列中的第一个单词和最后一个单词?

如何选择<tr>中的第一个和最后一个<td>?

如何获取文件中的第一个和最后一个日期

如何从双向链表中删除第一个和最后一个节点?

减少ndarray的第一个维度-保留第一个和最后一个元素

NgFor显示最后一个元素

列表中连续对的和,包括最后一个元素与第一个元素的和

嵌套v-for仅显示Vue中第一个元素的最后一个子元素

交替打印最后一个元素和第一个元素(JavaScript)