【发布时间】:2018-07-31 03:56:35
【问题描述】:
我有一个带有排序标题的普通 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 sort objects
编辑: 感谢您的所有回答。 我已经让它处理动态数据了。所以我不必为每个新的嵌套属性添加 switch 语句。
这是我的解决方案:(不需要创建扩展 MatTableDataSource 的新 DataSource)
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();
}
}
【问题讨论】:
-
能否请您更新 stackblitz 的修复程序