【问题标题】:Angular Material data Table with dynamic rows具有动态行的角材料数据表
【发布时间】:2018-09-21 07:26:01
【问题描述】:

我正在使用 Angular 5 和 Angular Material 数据表来构建数据。我指的是以下站点中的示例。在此考虑中,我需要将动态数据包含到每一行中,如屏幕截图中“最喜欢的”是列标题。

http://www.devglan.com/angular/angular-data-table-example

用于交叉引用的示例 Json。

constELEMENT_DATA: Element[
  
]=[
  {
    position: 1,
    firstName: 'John',
    lastName: 'Doe',
    email: 'john@gmail.com'favoriteColor: 'red',
    favorite: {
      favoriteFood: [
        'Idly',
        'Vada'
      ],
      favoriteCar: 'Mercendes Benz',
      favoriteMovie: 'JamesBond movie',
      favoritePlace: 'HillStation'
    }
  },
  {
    position: 1,
    firstName: 'Mike',
    lastName: 'Hussey',
    email: 'mike@gmail.com',
    favorite: {
      favoriteFood: 'Dosa',
      favoriteMovie: 'RajiniKandth movie'
    }
  },
  {
    position: 1,
    firstName: 'Ricky',
    lastName: 'Hans',
    email: 'ricky@gmail.com',
    favorite: {
      favoriteFood: 'Chappathi',
      favoriteCar: 'BMW'
    }
  },
  {
    position: 1,
    firstName: 'Martin',
    lastName: 'Kos',
    email: 'martin@gmail.com'favorite: {
      
    }
  },
  {
    position: 1,
    firstName: 'Tom',
    lastName: 'Paisa',
    email: 'tom@gmail.com',
    favorite: {
      favoriteCar: 'Ford'
    }
  }
];

HTML:

<mat-table #table [dataSource]="dataSource">

    <ng-container matColumnDef="position">
      <mat-header-cell *matHeaderCellDef> No. </mat-header-cell>
      <mat-cell *matCellDef="let element">  </mat-cell>
    </ng-container>

    <ng-container matColumnDef="firstName">
      <mat-header-cell *matHeaderCellDef> First Name </mat-header-cell>
      <mat-cell *matCellDef="let element">  </mat-cell>
    </ng-container>

    <ng-container matColumnDef="lastName">
      <mat-header-cell *matHeaderCellDef> Last Name </mat-header-cell>
      <mat-cell *matCellDef="let element">  <mat-cell>
    </ng-container>

    <ng-container matColumnDef="email">
      <mat-header-cell *matHeaderCellDef> Email </mat-header-cell>
      <mat-cell *matCellDef="let element">  </mat-cell>
    </ng-container>

    <mat-header-row *matHeaderRowDef="displayedColumns"></mat-header-row>
    <mat-row *matRowDef="let row; columns: displayedColumns;"></mat-row>
  </mat-table>

我的错误是我无法在屏幕截图中正确捕获输出。如果您将名字 John 视为第一行,Food:Idly,Vada 将出现在该行,但下一行将有 Car:Mercendes Benz,下一行将有电影 JamesBond 电影,下一行将出现:HillStation。其中属于这些行的所有其他列将是空白的。下一次迭代将以类似的方式为名字 Ricky 开始。在 Json 中,考虑所有这些最喜欢的项目都在最喜欢的范围内。

【问题讨论】:

  • 你有什么疑问?
  • 我的疑问是如何使用角度材料数据表显示动态(不一致)的收藏内容?我正在提供上面的 html。

标签: angular datatable angular-material-5


【解决方案1】:

只需在 HTML 中使用循环即可。

Stackblitz

<div class="example-container mat-elevation-z8">
  <mat-table #table [dataSource]="dataSource">
    <ng-container [matColumnDef]="col" *ngFor="let col of displayedColumns">
      <mat-header-cell *matHeaderCellDef> {{ col }} </mat-header-cell>
      <mat-cell *matCellDef="let element"> {{ element[col] }} </mat-cell>
    </ng-container>
    <mat-header-row *matHeaderRowDef="displayedColumns"></mat-header-row>
    <mat-row *matRowDef="let row; columns: displayedColumns;"></mat-row>
  </mat-table>
</div>

【讨论】:

  • 在此示例中,所有行都具有相同的元素。但是,如果您参考我上面的屏幕截图,其中最喜欢的列具有不相等的单元格数量。要求是这些将被列为单独的行,其他列留空。您能否分享您的输入重新格式化与示例匹配的代码? devglan.com/angular/angular-data-table-example
  • 元素是行变量的名称。如果您只打开 stackblitz,您会发现它有效。我无权访问屏幕截图(公司代理),但如果您想要“单元格数量不等”,只需让一些单元格为空即可。
  • 谢谢,我去看看。
  • 您能否查看重新格式化的 json 并立即提供您的答案。
  • 展平你的阵列。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-04-28
  • 2020-12-17
  • 2021-09-03
  • 2018-09-26
  • 2020-11-19
  • 2019-05-14
  • 1970-01-01
相关资源
最近更新 更多