У мене є звичайна таблиця даних Angular Material 2 з заголовками сортування. Всі сорти - заголовки працюють нормально. За винятком того, що має об’єкт як значення. Вони взагалі не сортуються.
Наприклад:
<!-- Project Column - This should sort!-->
<ng-container matColumnDef="project.name">
<mat-header-cell *matHeaderCellDef mat-sort-header> Project Name </mat-header-cell>
<mat-cell *matCellDef="let element"> {{element.project.name}} </mat-cell>
</ng-container>
зверніть увагу на element.project.name
Ось налаштування displayColumn:
displayedColumns = ['project.name', 'position', 'name', 'test', 'symbol'];
Зміна 'project.name'
на 'project'
не працює, ні"project['name']"
Чого мені не вистачає? Чи можливо це взагалі?
Ось Stackblitz: Angular Material2 DataTable об’єкти сортування
Редагувати: Дякую за всі ваші відповіді. Я вже працюю з динамічними даними. Тому мені не потрібно додавати оператор switch для кожного нового вкладеного властивості.
Ось моє рішення: (Створення нового DataSource, який розширює MatTableDataSource, не потрібно)
export class NestedObjectsDataSource extends MatTableDataSource<MyObjectType> {
sortingDataAccessor: ((data: WorkingHours, sortHeaderId: string) => string | number) =
(data: WorkingHours, sortHeaderId: string): string | number => {
let value = null;
if (sortHeaderId.indexOf('.') !== -1) {
const ids = sortHeaderId.split('.');
value = data[ids[0]][ids[1]];
} else {
value = data[sortHeaderId];
}
return _isNumberValue(value) ? Number(value) : value;
}
constructor() {
super();
}
}