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

时间:2018-10-12 11:22:52

标签: angular filter

我有一个表,其中显示多个数据列,其中一些带有格鲁吉亚(ქართული)文本,一些为英语,而有些两者都有。仅包含英文文本的列将得到很好的过滤,但是我无法过滤多语言或仅乔治亚文本。我找到了过滤表格的功能。

  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();
    }
  }

1 个答案:

答案 0 :(得分:0)

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

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