列中的Ng-Grid多重过滤

时间:2014-08-19 19:29:52

标签: angularjs ng-grid

假设我在ng-grid中有许多数据列之一,如下所示:

状态

打开

打开

待定

待定

我只能过滤一个,但是我可以使用ng-grid多个过滤器吗?例如,过滤“Open”会让我回到所有“开放”的状态,但是如果我想要回到“开放”和“关闭”状态呢?结果就像是:

状态

打开

打开

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

假设您在服务器端使用PHP / MySQL,我会使用这种方法:

在过滤器输入中输入Open|Closed之类的内容。 (或使用您喜欢的任何分隔符)

此搜索字符串将发送到您的服务器。

在服务器explode()将此搜索字符串转换为数组。

$search=explode("|",$searchstring);

然后从该数组生成一个sql查询。

示例代码:

//The searchstring that was send via ajax
$searchstring="Open|Closed";
//The field in the DB you want to filter
$field="status";

//Generate the where condition
$search=explode("|",$searchstring);
$whereCond="";
while (list($key, $val) = each($search)) {
    $whereCond.= "`".$field."` ='".$val."' OR " ;
}
//remove the last unnecessary OR
$whereCond = substr_replace( $whereCond, "", -3 );

//Generate the query
$query="SELECT * FROM `table` WHERE ( ".$whereCond." )";
//Fetch data from the DB and return it to your App

这应生成如下查询:

SELECT * FROM `table` WHERE ( `status` ='Open' OR `status` ='Closed' ) 

这样您就可以根据需要输入任意数量的 OR 条件。

注意适当数量的空格并使用正确的引号进行查询。

如果您正在使用其他堆栈,则必须找出自己的查询生成器。但基本上归结为这种方法。如果您使用的是服务器端数据,则必须在服务器端进行过滤。

可以在官方ng-grid网站here上找到客户端示例。

服务器端分页示例实际上是客户端的,它只是从服务器获取一个大的json文件。