我有下表
<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>
this answer matColumnDef 和 对象属性 必须有相同的名字。
matColumnDef
我把它弄对了 employeeWrapper.id
employeeWrapper.id
要不是 employeeWrapper.employee.name ,这是一个二级属性。设定 到 employee.name 或 name
employeeWrapper.employee.name
employee.name
name
是否有此问题的解决方案/解决方法?
您可以编写一个小助手函数来计算给定路径的嵌套属性的值,并使用它覆盖默认值 sortingDataAccessor 你的 dataSource ,差不多
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); };
mat-sort-header mat-header-cell
mat-sort-header
mat-header-cell
Stackblitz demo