Активировать фильтр Angular MatDataSource вручную

У меня есть ввод для поиска и раскрывающийся список выбора, в котором отображаются предопределенные фильтры. Чтобы реализовать фильтр, я расширил 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)


Если вам понадобится фильтрация в нескольких местах вашего приложения, я бы порекомендовал многоразовый способ фильтрации, например mat-table-filter

В противном случае можно вручную запустить источник данных для фильтрации, установив объект фильтра. Вы можете установить значения с помощью привязки клавиш для ввода и selectionChange для компонента mat-select.

person talhature    schedule 14.05.2019