【问题标题】:Iterating Angular Material table迭代角材料表
【发布时间】:2020-10-11 23:01:17
【问题描述】:

我使用 Angular Material mat-table,据我所知,它有一个循环属性的特殊符号,如 *matCellDef,如 Demo 所示。为了删除不必要的部分,我正在尝试迭代记录并动态构建表。我尝试使用<div let element of elements>...</div> 进行迭代,但失败了。那么,是否可以使用特殊的语法?

这是我尝试迭代的部分:

<ng-container matColumnDef="weight">
  <th mat-header-cell *matHeaderCellDef> Weight </th>
  <td mat-cell *matCellDef="let element"> {{element.weight}} </td>
</ng-container>

【问题讨论】:

  • MatTable 自动绑定到数组。只需设置列名和字段属性名。这里是入门dev.to/jwp/angular-material-table-in-20-minutes-15f4
  • @JohnPeters 非常感谢,它似乎很有用。但在第一部分,我看到列名不是从数据源收集的,而是静态给出的。我为什么要这样做,我想创建一个基本列表组件,而不是静态设置列名。这可能吗?
  • Mat-Table 同时使用 DisplayedColumns 和 DisplayedHeaders。两者都是数组,并且都可以在运行时由任何动态组件传入。只需抓住 MatTable 的实例并执行此操作。 myMatTable.displayedColumns=["col1","col2"] and myMatTable.displayedHeaders = ["Dynamic Header 1", "Dynamic Header2"]
  • 感谢您的帮助。 matColumnDef 呢?我必须在材料表(mat*table)中设置defxxx 属性吗? matColumnDef[matColumnDef]有什么区别?

标签: angular angular-material material-design


【解决方案1】:

像这样创建一个可重用的 matTable 视图组件:

我们可以看到columnHeaders是一个数组。

<ng-container 
  *ngFor="let colName of columnHeaders; let i = index" 
      matColumnDef="{{ displayedColumns[i] }}"
 >

标题值

<th mat-header-cell *matHeaderCellDef mat-sort-header>
  <span>
    {{ colName }}
  </span>
</th>

使用显示的Coumns 数组的实际行值。

<td mat-cell *matCellDef="let row">
 <span>
   {{ row[displayedColumns[i]] }}
 </span>
</td>

和数据绑定

<table
     [id]="tableId"
     matSort
     mat-table
     [(dataSource)]="dataSource"    
  >...

这允许一个人注入数据源,它是一个任何东西的数组,以及一个列标题和 dsiplaycolumn 的数组,如下所示:

要重用上面显示的 matTable 组件,我们可以注入 columnHeaders、displayedColumns 和 dataSource,就像这段代码所示。

@ViewChild(ParentComponent) matTable:ParentComponent
displayedColumns = ["id", "firstName", "lastName", "updated", "actions"];
columnHeaders = ["ID", "First Name", "Last Name", "Last Updated", "Actions"];

 private setTableColumns() {
      if (this.people.length > 0) {
         this.matTable.displayedColumns = this.displayedColumns;
         this.matTable.columnHeaders = this.columnHeaders;
         this.matTable.dataSource = this.myArray;
      }
   }

或者像这样在 html 中假设 app-material-table 是一个可重用的视图,显示了上面显示的绑定。

<app-material-table
   [dataSoure]="myArray"
   [columnHeaders]="columnHeaders"
   [displayedColumns]="displayedColumns"     
</app-material-table>

注意:每当我看到像 MatTable 这样的东西时,我都会立即考虑创建一个更简化的可重用视图,将使用它的知识抽象为更容易的东西,如上所示。

【讨论】:

  • 非常感谢您的帮助。关于你的笔记,你的意思是像this 例子吗?我跟着它,似乎没问题。对它的任何评论(它也有GitHub页面)。
  • 感谢您的帖子,我也有兴趣看到该解决方案。
  • 在这种情况下,您建议我使用我在之前的评论中给出的方法。您对这种方法有什么建议吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-09
  • 2016-08-11
  • 2020-12-23
  • 1970-01-01
相关资源
最近更新 更多