#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 для отображения маленького крестика вместо кнопки.