【问题标题】:PrimeNG p-table: How to clear p-dropdown filter values when resetting table filters?PrimeNG p-table:重置表格过滤器时如何清除 p-dropdown 过滤器值?
【发布时间】:2020-09-07 05:00:27
【问题描述】:
我正在使用 PrimeNG p-table,其标题行同时具有 input 和 p-dropdown 过滤器,并且需要在调用时清除 input 和 p-dropdown 的过滤器值桌上的.reset() 方法。
正如其他人指出的 (https://stackoverflow.com/a/51402834/5764320),您可以在 input 元素上使用 [value],但似乎没有办法清除任何非 input 过滤器值。
如何重置p-dropdown(和其他非input 过滤器类型)的过滤器值?
【问题讨论】:
标签:
html
angular
typescript
primeng
primeng-table
【解决方案1】:
我想出了一种简单、干净的方法,您可以使用 ng-template 来完成此操作。
- 将拥有过滤器的
<tr> 放入ng-template
- 使用
[ngTemplateOutlet] 和*ngIf 将ng-template 添加到您的HTML 中两次,并分配一个可以切换的值,以便一个模板用于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
}
【解决方案2】:
我只是通过引用 ts 组件中的 来手动清除它们。
模板
<p-dropdown #myDropDown (onChange)="dt.filter($event.value, col.field, 'equals')">
</p-dropdown>
TypeScript
...
@ViewChild("myTable", {static: false}) myTable: Table
@ViewChild("myDropDown", {static: false}) myDropDown: Dropdown
onResetTable() {
this.myTable.clear()
this.myDropDown.clear(null);
}
...