我想出了一个简单、干净的方法,你可以用它ng-template
来完成这个。
- 将您
<tr>
的过滤器放入ng-template
- 使用and将
ng-template
两次添加到您的 HTML 中,并分配一个可以切换的值,以便一个模板用于,另一个用于.[ngTemplateOutlet]
*ngIf
true
false
- 清除过滤器时切换分配给模板的值。
这会“清除”过滤器,因为 Angular 在切换模板时从 DOM 中完全添加和删除模板的 HTML,这意味着之前使用的任何值都将不再存在。
HTML
这假设您正在使用<p-table #dt ...>
,以便dt
可以通过单击按钮传递。
注意:留下一些p-table
相关的部分和属性以保持清洁。
<ng-template [ngTemplateOutlet]="FilterRow" *ngIf="showFilters"></ng-template>
<ng-template [ngTemplateOutlet]="FilterRow" *ngIf="!showFilters"></ng-template>
<!-- Whatever your 'tr' content is goes inside this template, this is an abbreviated example -->
<ng-template #FilterRow>
<tr>
<th class="text-center">
<button (click)="clearFilters(dt)">Reset</button>
</th>
<th>
<p-dropdown (onChange)="dt.filter($event.value, col.field, 'equals')"></p-dropdown>
</th>
<th>
<input pInputText type="text" (input)="dt.filter($event.target.value, col.field,'contains')"/>
</th>
</tr>
</ng-template>
打字稿
...
showFilters = true;
...
clearFilters(dt) {
this.showFilters = !this.showFilters; // toggle the ng-templates
dt.reset(); // reset the table
}