【问题标题】:How to use Angular Material table MatSort如何使用 Angular Material 表 MatSort
【发布时间】:2020-07-17 19:22:35
【问题描述】:

我有一个mat-table 我想添加排序功能。有人可以告诉我为什么以下不起作用?我在列标题上看到了带样式的箭头,但它们没有按预期对数据进行排序。

<table mat-table matSort [dataSource]="employeeDisplayList" class="mat-elevation-z8 table">

<!-- Employee Name Column -->
<ng-container matColumnDef="employeeName">
  <th mat-header-cell *matHeaderCellDef mat-sort-header> Employee Name </th>
  <td mat-cell *matCellDef="let element" 
    [ngClass]="{'dependent': element.relationship !== 'Primary'}"> {{element.employeeName}} </td>
</ng-container>

<!-- Relationship Column -->
<ng-container matColumnDef="relationship">
  <th mat-header-cell *matHeaderCellDef mat-sort-header> Relationship </th>
  <td mat-cell *matCellDef="let element"
    [ngClass]="{'dependent': element.relationship !== 'Primary'}"> {{element.relationship}} </td>
</ng-container>

</table>

TS:

...
import { MatTableModule } from '@angular/material/table';
import { MatSortModule } from '@angular/material/sort';

@NgModule({
  declarations: [EnrollmentComponent, PrepareSubmissionComponent, PlansComponent, EmployeesComponent],
  imports: [
    ...
    MatTableModule,
    MatSortModule
  ]
})

【问题讨论】:

    标签: angular angular-material


    【解决方案1】:

    您必须在组件中定义 displayColumns。 您还必须使用 MatTableDataSource 并将数据放入其中并进行排序。

    尝试在您的 ts 文件中添加以下代码

    displayedColumns: string[] = ['employeeName', 'relationship'];
    dataSource;
    
    @ViewChild(MatSort, {static: true}) sort: MatSort;
    
    ngOnInit() {
      this.dataSource = new MatTableDataSource(employeeDisplayList);
      this.dataSource.sort = this.sort;
    }
    

    您还错过了 html 中的 2 行以下内容。

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

    您的最终 html 如下所示

    <table mat-table matSort [dataSource]="dataSource" class="mat-elevation-z8 table">
    
      <!-- Employee Name Column -->
      <ng-container matColumnDef="employeeName">
        <th mat-header-cell *matHeaderCellDef mat-sort-header> Employee Name </th>
        <td mat-cell *matCellDef="let element" [ngClass]="{'dependent': element.relationship !== 'Primary'}"> {{element.employeeName}} </td>
      </ng-container>
    
      <!-- Relationship Column -->
      <ng-container matColumnDef="relationship">
        <th mat-header-cell *matHeaderCellDef mat-sort-header> Relationship </th>
        <td mat-cell *matCellDef="let element" [ngClass]="{'dependent': element.relationship !== 'Primary'}"> {{element.relationship}} </td>
      </ng-container>
    
      <tr mat-header-row *matHeaderRowDef="displayedColumns"></tr>
      <tr mat-row *matRowDef="let row; columns: displayedColumns;"></tr>
    </table>

    【讨论】:

    • 您可以查看此 stackblitz 了解更多详情:stackblitz.com/angular/…
    • 感谢您的帮助,我还没有将数据源转换为 MatTableDataSource。
    猜你喜欢
    • 1970-01-01
    • 2020-10-17
    • 2019-10-07
    • 2022-01-09
    • 2019-01-16
    • 1970-01-01
    • 2018-09-23
    • 2018-11-16
    • 1970-01-01
    相关资源
    最近更新 更多