带有 ngFor 和排序的 Mat 表

Avi*_*y m 6 angular angular-material-6

我有一个带有 ngfor 的 mat-accordion,当您单击面板时,会显示一个表格。
除了垫排序之外,一切都按预期工作,它只对第一个表进行排序。
我读到我需要将模板引用变量放在每个表中,但我如何动态地做到这一点?或者有其他一些方法来实现这一点。
这是我的代码:

  <mat-accordion style="width: 80%">
<mat-expansion-panel *ngFor="let customer of customers; let i = index" (opened)="openPanel(customer);">
  <mat-expansion-panel-header>
    <mat-panel-title>
      {{customer.name}}
    </mat-panel-title>
    <mat-panel-description>
      <span style="text-align:center">{{" Active Calls: " + customer.active}}</span>
      <span style="margin-left: 100px;">{{" Talking Calls: " + customer.talking}}</span>
    </mat-panel-description>
  </mat-expansion-panel-header>
  <table #HERE-I-NEED-TO-PUT-DYNMIC-ID mat-table [dataSource]="dataSource" matSort class="mat-elevation-z8">
    <ng-container *ngFor="let column of tableColumns;" matColumnDef="{{column.field}}">
      <th mat-header-cell *matHeaderCellDef mat-sort-header> {{column.name}} </th>
      <td mat-cell *matCellDef="let element">
         <span *ngIf="column.field !== 'answered'"> {{element[column.field]}} </span>
         <span *ngIf="column.field === 'answered' && element[column.field] > 0">{{getTime(element[column.field] * 1000) | date: 'HH:mm:ss'}}</span>
      </td>
    </ng-container>
    <tr mat-header-row *matHeaderRowDef="displayedColumns"></tr>
    <tr mat-row *matRowDef="let row; columns: displayedColumns;"></tr>
  </table>
</mat-expansion-panel>
Run Code Online (Sandbox Code Playgroud)

谢谢。

小智 11

我用方括号解决了这个问题。
代码如下。

    <ng-container *ngFor="let col of cols" [matColumnDef]="col">
        <th mat-header-cell *matHeaderCellDef mat-sort-header> {{ col }} </th>
        <td mat-cell *matCellDef="let element"> {{ element[col] }} </td>
    </ng-container>
Run Code Online (Sandbox Code Playgroud)