我有下表
<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
和对象属性必须具有相同的名称。
我正确地使用了employeeWrapper.id
,并且排序正常。
但是对于employeeWrapper.employee.name
,这是第二层属性。将matColumnDef
设置为employee.name
或name
无效。我都尝试过。
是否有解决此问题的方法/解决方法?
答案 0 :(得分:2)
您可以编写一个小的辅助函数来计算给定嵌套路径的嵌套属性的值,并使用它覆盖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
的{{1}}属性设置为等于嵌套的属性字符串(有关说明,请参见演示)。