我有一个表,其中显示多个数据列,其中一些带有格鲁吉亚(ქართული)文本,一些为英语,而有些两者都有。仅包含英文文本的列将得到很好的过滤,但是我无法过滤多语言或仅乔治亚文本。我找到了过滤表格的功能。
filterPredicate: ((data: T, filter: string) => boolean) = (data: T, filter: string): boolean => {
// Transform the data into a lowercase string of all property values.
const accumulator =
(currentTerm: string, key: string) => currentTerm + (data as {[key: string]: any})[key];
const dataStr = Object.keys(data).reduce(accumulator, '').toLowerCase();
// Transform the filter by converting it to lowercase and removing whitespace.
const transformedFilter = filter.trim().toLowerCase();
return dataStr.indexOf(transformedFilter) != -1;
}
filterPredicate可以在github.上找到,我试图摆脱toLowerCase,但这没有帮助。我正在使用MatTableDataSource创建dataSource。在HTML中,我使用的是角度材料页面上的applyFilter函数。
<input matInput (keyup)="applyFilter($event.target.value)" placeholder="Filter">
<ng-container matColumnDef="vehicleOwner">
<th mat-header-cell *matHeaderCellDef mat-sort-header> Owner </th>
<td mat-cell *matCellDef="let vehicle"> {{vehicle.owner.ownerName}} </td>
</ng-container>
<ng-container matColumnDef="contactPhone">
<th mat-header-cell *matHeaderCellDef mat-sort-header> Contact Phone </th>
<td mat-cell *matCellDef="let vehicle"> {{vehicle.contactPhone}} </td>
</ng-container>
在打字稿文件中,applyFilter称为:
// table filter
applyFilter(filterValue: string) {
this.dataSource.filter = filterValue.trim().toLowerCase();
if (this.dataSource.paginator) {
this.dataSource.paginator.firstPage();
}
}
答案 0 :(得分:0)
我意识到多语言过滤可以正常工作。问题是我的MatTableDataSource包含对象而不只是数据。例如,在上面问题中的HTML代码中,您可以看到owner.ownerName。我的问题是我试图过滤对象所有者而不是其属性ownerName。
尝试仅过滤属性时,格鲁吉亚(ქართული)过滤工作正常。我只需要使用表中的属性来创建数据源。完成后,我将发布解决方案。