在完成上一个之后调用行中的过滤器方法

Abd*_*naz 16 primeng angular angular5

我有一个primeng turbo-table组件.我需要在桌面上应用多个过滤器.
从父母那里我
myTable.doFilter(first_values); myTable.doFilter(second_values);一个接一个地 打电话

在子(turbo-table)组件上,实际过滤器的应用类似于
doFilter(...filter_values...){ this.pTable.filter(...filter_values...); } 问题是第二个过滤器在第一个过滤器完成之前应用并导致意外结果.
上一次过滤完成后,如何调用过滤器.过滤器完成后会发出一个事件但我无法找到一种方法来利用它.

Parent.ts

 fetchList(searchData) {
        this.ratesTable.reset();
        this.ratesDataSource = [];
        this.programService.fetchList(searchData)
          .then(
            (response) => {

              this.ratesDataSource = response.rates;
              this.doTermFilter();
              this.doLoanFilter();
            })
          .catch((error) => {
            console.error("from ts" + error);
          });
      }
    doTermFilter(){
    this.doFilter({ filterValue: _termFilters, columnField: "COL1", filterMethod: "in" });
    }
doLoanFilter(){
    this.doFilter({ filterValue: _loanFilters, columnField: "COL7", filterMethod: "in" });
    }
Run Code Online (Sandbox Code Playgroud)

child.ts(涡轮表)

 doFilter(doFilterInput: { filterValue: any[], columnField: any, filterMethod: any }) {
    this.pTable.filter(doFilterInput.filterValue, doFilterInput.columnField, doFilterInput.filterMethod);
    }
Run Code Online (Sandbox Code Playgroud)

任何帮助深表感谢.谢谢

kem*_*sky 0

这是过滤器方法源代码:

filter(value, field, matchMode) {
    if(this.filterTimeout) {
        clearTimeout(this.filterTimeout);
    }

    if (!this.isFilterBlank(value)) {
        this.filters[field] = { value: value, matchMode: matchMode };
    } else if (this.filters[field]) {
        delete this.filters[field];
    }

    this.filterTimeout = setTimeout(() => {
        this._filter();
        this.filterTimeout = null;
    }, this.filterDelay);
}
Run Code Online (Sandbox Code Playgroud)

您可以看到他们正在使用超时,并且事件仅发出一次,因为之前的超时被取消,但如果没有完整的示例,总体情况尚不清楚。

链接:https://github.com/primefaces/primeng/blob/master/src/app/components/table/table.ts