如何在角度材料表中过滤多种语言文本?



>我有一个表格,显示多个数据列,其中一些带有格鲁吉亚语(ქართული(文本,一些英语和一些两者兼而有之。仅包含英语文本的列可以很好地过滤,但我无法过滤多语言或仅过滤格鲁吉亚语文本。我找到了过滤表格的函数。

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上找到。我试图摆脱小写,但它没有帮助。我正在使用MatTableDataSource来创建数据源。在HTML中,我正在使用在角度材料页面上找到的应用过滤器功能。

<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>

在打字稿文件中,应用过滤器被称为:

// table filter
applyFilter(filterValue: string) {
this.dataSource.filter = filterValue.trim().toLowerCase();
if (this.dataSource.paginator) {
this.dataSource.paginator.firstPage();
}
}

我意识到多语言过滤工作正常。问题是我的MatTableDataSource包含对象而不仅仅是数据。例如,在上面的问题中的HTML代码中,您可以看到owner.ownerName。我的问题是我正在尝试过滤对象所有者而不是其属性所有者名称。

格鲁吉亚语(ქართული(过滤工作正常,当尝试仅过滤属性时。我只需要使用表中的属性创建数据源。一旦我完成了我的解决方案,我将发布它。

最新更新