我还在学习Angular / ui-grid并且已经陷入困境,希望有人可以指出我正确的方向。设置网格时,可以使用以下命令启用过滤:
$scope.gridOptions.enableFiltering = true;
然后在 columnDefs 中定义网格时,您可以使用各种测试(等于,包含,精确,小于等)打开列过滤,或者自己制作 - 即甚至可以定义自己的布尔函数来驱动每行的通过/失败以获得所需的过滤逻辑。这是一个典型的例子:
{
field: 'phone',
filter: {
condition: function(searchTerm, cellValue) {
var strippedValue = (cellValue + '').replace(/[^\d]/g, '');
return strippedValue.indexOf(searchTerm) >= 0;
}
},
但是这种过滤逻辑能力似乎都特定于一列。那么如果你有一个跨场的过滤测试(简单的例子:字段A =字段B?)或甚至可能是跨行(即我实际上有一个案例,我在集合中进行复杂测试 of rows来确定应该过滤/排出哪些行。 是否有一种标准方法可用于如何进行此类更全局的过滤?
通过将计算的包含/排除结果保存在一个实际未显示的隐藏列中,我已经接近解决方案,但我似乎无法让ui-grid实际执行过滤器功能隐藏的专栏。这提出了一个相关的问题:如何强制执行过滤操作(因为我想从不属于网格的控件触发)?
我试图整理一个更简单的案例(A = B?):http://plnkr.co/edit/a0BJZVOGGIyP4Q4hxVob?p=preview
我认为,如果我理解如何使这项工作,也许答案也会回答(或无言之意)问题的动态方面(如何在需要时强制过滤操作)。
感谢您的帮助
答案 0 :(得分:2)
我今天在教程中添加了一个交叉字段示例:http://ui-grid.info/docs/#/tutorial/321_singleFilter
关键是基本过滤一次对列进行操作。它从可见的所有行开始,然后如果行与任何单个列过滤器都不匹配,则将其设置为不可见。您要求的更类似于OR条件,过滤当前不支持。
但是,您可以做的是构建一个应用自定义过滤的自定义rowsProcessor,教程提供了一个示例。
答案 1 :(得分:0)
尝试这样的事情
{
field: 'phone',
filter: {
condition: function(searchTerm, cellValue) {
var strippedValue = (cellValue + '').replace(/[^\d]/g, '');
var match1 = strippedValue.indexOf(searchTerm) >= 0;
var match2 = // some Other condition
return (match1 || match2); //add additional matches as needed.
}
},