Сортировка с использованием mat-таблицы для вложенных свойств
У меня есть следующая таблица
<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
это свойство второго уровня. Настройка matColumnDef
в employee.name
или же name
не работает. Я пробовал оба.
Есть ли решение / обходной путь для этой проблемы?
1 ответ
Решение
Вы можете написать небольшую вспомогательную функцию для вычисления значения вложенного свойства с учетом его пути и использовать его для переопределения значения по умолчанию 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
равно вашей вложенной строке свойства (см. демонстрацию для уточнения).