Tôi có một DataTable Angular Material 2 bình thường với các tiêu đề sắp xếp. Tất cả các loại tiêu đề đều hoạt động tốt. Ngoại trừ cái có đối tượng là giá trị. Những thứ này không sắp xếp gì cả.
Ví dụ:
<!-- 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>
lưu ý element.project.name
Đây là cấu hình displayColumn:
displayedColumns = ['project.name', 'position', 'name', 'test', 'symbol'];
Thay đổi 'project.name'
thành 'project'
không hoạt động cũng không"project['name']"
Tôi đang thiếu gì? Điều này thậm chí có thể?
Đây là một Stackblitz: Angular Material2 DataTable sắp xếp các đối tượng
Chỉnh sửa: Cảm ơn tất cả các câu trả lời của bạn. Tôi đã làm cho nó hoạt động với dữ liệu động. Vì vậy, tôi không phải thêm câu lệnh switch cho mọi thuộc tính lồng nhau mới.
Đây là giải pháp của tôi: (Tạo một DataSource mới mở rộng MatTableDataSource là không cần thiết)
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();
}
}