手动触发Angular MatDataSource过滤器

时间:2019-05-14 09:03:40

标签: angular angular-material angular-material2 angular-material-6 angular-material-5

我有一个搜索输入和一个选择下拉列表,其中显示了预定义的过滤器。为了实现过滤器,我使用自定义过滤器扩展了Angular MatDataSource filter predicate

this.invitationsDataSource.filterPredicate = (d: InvitationsApi, x: string) => {
  return this.recursiveSearch(d, x) && this.handleFilter(this.filterControl.value, d);
};

现在,我订阅了搜索输入的valueChanges和过滤器选择下拉列表,以正确过滤数据:

this.searchControl.valueChanges.pipe(
    map(query => query.trim().toLowerCase()),
    map(query => this.invitationsDataSource.filter = query)
).subscribe();

,然后为过滤器选择下拉列表:

this.filterControl.valueChanges.pipe(
).subscribe();

如何立即触发过滤器?问题在于,当searchControl为空并且选择了filterControl时,也应该触发该过滤器。是否有任何方法可以手动触发Angular MatDataSource过滤器?

1 个答案:

答案 0 :(得分:0)

如果您需要在应用程序中的多个位置进行过滤,我建议使用一种可重用的过滤方式,例如mat-table-filter

否则,可以通过设置过滤器对象来手动触发数据源进行过滤。 您可以通过输入的键盘绑定和为mat-select组件的selectionChange设置值。