【问题标题】: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,其标题行同时具有 inputp-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 来完成此操作。

    1. 将拥有过滤器的<tr> 放入ng-template
    2. 使用[ngTemplateOutlet]*ngIfng-template 添加到您的HTML 中两次,并分配一个可以切换的值,以便一个模板用于true,另一个模板用于false
    3. 在清除过滤器时切换分配给模板的值。

    这会“清除”过滤器,因为 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);
            }
      ...
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-01-05
        • 2020-11-09
        • 1970-01-01
        • 1970-01-01
        • 2018-11-30
        • 2018-11-11
        • 1970-01-01
        • 2018-11-18
        相关资源
        最近更新 更多