4

我有下表

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

<!-- Name Column -->
<ng-container matColumnDef="employee.name">
    <th mat-header-cell *matHeaderCellDef mat-sort-header> Name </th>
    <td mat-cell *matCellDef="let employeeWrapper">{{employeeWrapper.employee.name}}</td>
    </ng-container>

    <ng-container matColumnDef="id">
        <th mat-header-cell *matHeaderCellDef mat-sort-header> ID </th>
        <td mat-cell *matCellDef="let employeeWrapper">{{employeeWrapper.id}}</td>
    </ng-container>

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

这个答案matColumnDef中,对象属性必须具有相同的名称。

我做对了employeeWrapper.id,排序工作正常。

但是对于employeeWrapper.employee.name,它是二级属性。设置matColumnDefemployee.namename不起作用。我都试过了。

这个问题有解决方案/解决方法吗?

4

1 回答 1

7

您可以编写一个小辅助函数来计算给定路径的嵌套属性的值,并使用它来覆盖sortingDataAccessor您的默认值dataSource,例如

getPropertyByPath(obj: Object, pathString: string){
  return pathString.split('.').reduce((o, i) => o[i], obj);
}

dataSource.sortingDataAccessor = (data, sortHeaderId: string) => {
  return getPropertyByPath(data, sortHeaderId);
};

您还必须将equal 的mat-sort-header属性设置mat-header-cell为您的嵌套属性字符串(请参阅演示以了解说明)。

Stackblitz 演示

于 2018-12-12T14:12:54.640 回答