首页 > 解决方案 > 使用 FilterPredicate 创建自定义过滤器来过滤 DataSource

问题描述

我正在使用数据源来存储我的所有数据。到目前为止,我在执行搜索时使用的是标准过滤器。但是,现在我想使用“OR”运算符执行搜索。

例子 :

{name : john, age : 25, work : driver}

{name : peter, age : 28, work : writer}

{name : james, age : 39, work : athlete}

如果我输入“john james”,我希望过滤功能让我获得第 1 行和第 3 行。

我很确定我们必须使用 filterPredicate,但我真的不明白如何创建/使用它们,而且我找不到任何体面/工作的例子

除了给我一个原型之外,该文档无济于事:

filterPredicate: ((data: T, filter: string) => boolean);

你们有任何想法或代码示例如何实现吗?

这是我现在的基本搜索功能的样子:

  applyFilter(filterValue: string) {
    filterValue = filterValue.toLowerCase();
    this.dataSource.filter = filterValue;
  }

标签: angulartypescriptpredicate

解决方案


const users = [
  {name : 'john', age : 25, work : 'driver'},
  {name : 'peter', age : 28, work : 'writer'},
  {name : 'james', age : 39, work : 'athlete'}
]

const query = "john james";

const filtered = users.filter(e => query.includes(e.name));

这应该工作:)

使用数据源:

this.dataSource.filterPredicate = (data, filter) => filter.includes(data.name)

推荐阅读