angular - Angular:在数据源中使用对象时,MatSort 不起作用
问题描述
我有一个 Angular 6 应用程序,它有一个 Mat Table。该表的数据填充如下。排序适用于字段position
和name
,但不适用于作为对象一部分的weight
和。我也尝试将列命名为in and但没有运气。请告知我做错了什么?symbol
detail
detail.weight
displayedColumns
matColumnDef
const ELEMENT_DATA: PeriodicElement[] = [
{position: 1, name: 'Hydrogen', detail: {weight: 4.0026, symbol: 'He'}},
{position: 2, name: 'Helium', detail: {weight: 4.0026, symbol: 'He'}},
]
displayedColumns: string[] = ['position', 'name', 'weight', 'symbol'];
模板
<ng-container matColumnDef="weight">
<th mat-header-cell *matHeaderCellDef mat-sort-header> Weight </th>
<td mat-cell *matCellDef="let element"> {{element.detail.weight}} </td>
</ng-container>
这是问题的 stackblitz url
https://stackblitz.com/edit/angular-kumdeq
解决方案
使用sortingDataAccessor,它
允许通过覆盖排序数据访问器来自定义排序,排序数据访问器定义了如何访问数据属性。
在 ngOnInit 中添加以下代码片段:
this.dataSource.sortingDataAccessor = (item, property) => {
switch (property) {
case 'weight': return item.detail.weight;
case 'symbol': return item.detail.symbol;
default: return item[property];
}
推荐阅读
- haskell - 如何使用堆栈处理单个文件?
- c# - 如何在 Asp.Net MVC 应用程序旁边初始化一个类
- react-native - 使用 react-navigation 将 Javascript 对象传递到另一个屏幕
- android - React-Native:当应用程序处于离线状态时,无法使用 Firestore 添加或设置()文档(无法访问互联网)
- json - 使用 ansible 规范化平面数据结构
- r - 我无法旋转数据框
- python - Spyder - 在同一个内核上运行的 2 个不同的脚本
- google-cloud-platform - 如何将 GCP 中 VM 的输出定向到 stackdriver?
- c# - 可以将字节数组转换为 AudioClip 吗?
- rest - 从第 3 方 RESTful API 收集数据,然后重命名为与 REST 相同的名称