是否可以在AG-Grid中过滤多个字符串?

时间:2016-08-19 18:07:45

标签: javascript html angularjs ag-grid

我一直在使用

<service-activator ref="txGateway" input-channel="channel1" output-channel="channel2">
    <poller/>
    <request-handler-advice-chain>
        <tx:advice/>
    </request-handler-advice-chain>
</service-activator>

<gateway id="txGateway" default-request-channel="txChain"/>

<chain input-channel="txChain">
    <Authorzier/>
    <JMS_put1/>
    <DB_update_state1/>
</chain> 

暂时取得了巨大的成功,但我希望能够同时过滤string1,string2或string3,并立即查看所有结果。这可能吗?我在ag-grid文档上找不到任何内容。

1 个答案:

答案 0 :(得分:0)

由于自定义过滤器示例here专注于各个列,因此使用External filter似乎是理想的解决方案。

您需要实现两种方法-在gridOptions上:isExternalFilterPresent()doesExternalFilterPass(node)

  isExternalFilterPresent() {
    return true; // to indicate external filtering is on
  }

  doesExternalFilterPass(node) {

// filter only if searchtext is there
   if (this.searchText) {
        return Object.values(node.data).includes(this.searchText.split(' ')[0]) // 'string1'
         || Object.values(node.data).includes(this.searchText.split(' ')[1]) // 'string2'
         || Object.values(node.data).includes(this.searchText.split(' ')[2]); // 'string3'
    }
   return true;
}

// assuming this is bound to your input field
  externalFilterChanged(newValue) {
    this.searchText = newValue;
    this.gridApi.onFilterChanged(); // letting the grid know filter has changed
  }

来自文档-

isExternalFilterPresent
每次网格检测到过滤器更改时,都会被精确调用一次。如果外部过滤处于活动状态,则应返回true,否则返回false。如果返回true, doesExternalFilterPass()将在过滤时被调用,否则将不会调用doesExternalFilterPass()

doesExternalFilterPass
为网格中的每个行节点调用一次。如果返回false,则该节点将从最终节点中排除 设置。

如果外部过滤器发生变化,则需要致电api.onFilterChanged() 告诉网格。