angular - Angular Material MatSort 和sortingDataAccessor 如何协同工作?
问题描述
我正在使用 Angular 材料表。我正在尝试实现自定义排序行为。
我已经在使用这样的sortingDataAccessor:
export class BillsComponent implements OnInit, OnDestroy {
@ViewChild(MatSort, { static: true }) matSort: MatSort;
data;
displayedColumns = [
'alreadyExported',
'date',
'invoiceNumber'
];
ngOnInit() {
this.loadData();
}
loadData() {
...
.subscribe(data => {
// Set new accessor
this.data = new MatTableDataSource(data);
this.data.sortingDataAccessor = (item, header) => {
switch (header) {
case 'date': return new Date(item.rechnungsdatum);
case 'alreadyExported': return (item.export.exportFuerSteuerberater === null ? true : false);
default: return item[header];
}
};
this.data.sort = this.matSort;
});
}
sortEvent() {
this.data.sortingDataAccessor = (data, header) => data[header];
this.data.sort = this.matSort;
}
}
但是,我现在对另一列有问题。它是一个包含带有数字和文本的字符串的列。
表格列中的数据如下所示:
- BE-131
- BE-130
- BE-13
- BE-129
- BE-128
- BE-110
- BE-11
- BE-109
- BE-1
但应该是这样的:
- BE-131
- BE-130
- BE-129
- BE-128
- BE-110
- BE-109
- BE-13
- BE-11
- BE-1
我想添加一个自定义排序行为,就像在这篇文章中解释的那样,但我不明白 sort 和 sortDataAccessor 是如何一起工作的。我实际上根本不明白它们之间的区别。
谁能向我解释差异以及如何应用这种排序行为?
解决方案
您可以在排序数据访问器中生成并返回可比较的值。在您的情况下,它可能是:
- BE-00001
- BE-00011
- BE-00131
就我而言,我使用以下代码:
private sortingDataAccessor = (item, property) => {
switch (property) {
case 'address': return this.getComparableAddress(item.address);
default: return item[property] || '';
}
}
private getComparableAddress(sourceAddress: string): string {
let address = '';
const blockLength = 3;
const splittedAddress = sourceAddress.split(' ');
for (const item of splittedAddress) {
for (let i = 0; i < blockLength - item.length; i++) {
address = address + '0';
}
address = address + item;
}
return address;
}
推荐阅读
- audit.net - Audit.EntityFramework 是否可以忽略某些实体上的插入?
- java - 使用 CompletableFuture 构建具有多种方法的对象
- javascript - vue-cli上传服务器后,请求服务器图片路径多为/dist/
- bluetooth - 如何在斑马蓝牙打印机中借助 ZPL 在打印下一个作业之前回馈第一个可打印标签
- git - 如何在整个解决方案中使用 .gitignore
- spring-boot - HikariCP 连接未关闭
- spring-boot - spring boot如何控制jdbc连接?无法获取 jdbc 连接问题频繁出现
- excel - 谷歌表格的 Excel 中 VBA 的 Range.Value 等价物是什么?
- jquery - 在 Angular 中动态加载 html 控件
- reactjs - 如何使用 Gatsby 和 create-react-app 添加 react-native out-of-tree 平台?