Сбросить фильтр поиска таблицы Mat данных Angular

#angular #typescript #angular-material-table

#angular #typescript #angular-material-table

Вопрос:

В моем веб-приложении используется база данных материала (https://code-maze.com/angular-material-table /), чтобы отобразить некоторые существующие данные. Он также имеет различные фильтры, включая встроенный фильтр поиска таблицы Mat данных. Моя проблема в том, что я могу сбросить все другие мои самостоятельно реализованные фильтры нажатием кнопки «очистить все фильтры», но я не могу найти способ очистить фильтр поиска и сбросить отфильтрованные данные.

   // This is my data source that is used in the template
  dataSource = new MatTableDataSource<MyObj>();

  // ... more code here ...

  clearFilters(){
        //clear other filters here

        //I want clear dataSource's search filter... but how?
  }
  

Я не видел, чтобы это было опубликовано где-либо еще, и выполнение таких действий, как dataSource.filter = "" или dataSource.filter = null затем обновление наблюдателей, не очищает текстовое поле и не дает никаких результатов.

Ответ №1:

Задайте свойству filter значение пустой строки.

 clearFilters(){
   this.dataSource.filter = '';
}
  


В дополнение к этому привяжите модель к элементу и сбросьте также входное значение фильтра.

Шаблон :

 <mat-form-field class="this-is-a-class" floatLabel="never">
  <mat-icon matPrefix>search</mat-icon>
  <input matInput type="text" [(ngModel)]="filter" #ctrl="ngModel" (keyup)="applySearchFilter($event.target.value)" placeholder="Search by ID or Address..." autocomplete="off"> </mat-form-field>
  

TS :

 filter:string;

clearFilters(){
   this.dataSource.filter = '';
   this.filter = '';
}
  

Комментарии:

1. Как я уже сказал в конце моего вопроса, это не работает. Текст остается в поле поиска.

2. @JamieTaylorSangerman: можете ли вы поделиться своим шаблоном и ts-файлом

3. Я не знал, что (или не думал), что вы могли бы привязать значение к ngModel подобным образом. Работает как по волшебству. Спасибо!

4. У меня сработало с добавлением изменений. После <ввода matInput …. > я добавил кнопку <кнопка mat-button *ngIf=»filter» matSuffix кнопка mat-icon aria-label=»Очистить» (click) = «clearFilters()»> <значок mat> закрыть</значокmat><кнопка> . Далее импортировал MatIconModule в мой файл .module.ts и добавил URL @import(» fonts.googleapis.com/icon ? family=Material Icons» ); в моем файле .scss для отображения маленького крестика вместо кнопки.