过滤($filter)从对象列表中匹配值,不包括不必要的属性
Filtering ($filter) matching values from list of objects excluding unnecessary properties
我试图通过定义我的自定义过滤器st-set-filter="myCustomFilter"
来修改智能表全局搜索的行为。在这里
.filter('myCustomFilter', ['$filter', function($filter){
return function(input, predicate){
return $filter('filter')(input, predicate, false);
}
}])
Smart Table输入是一个对象列表,它们的属性是列的名称。我想只过滤表列的给定子集。
如果在输入foo后输入console.log predicate
,我将看到类似Object {$: "foo"}
的内容。这意味着过滤器正在查找列表中对象的任何属性(即列)的匹配。
是否有一种方法来正确定义谓词根据我的需求(例如排除不必要的属性?
只需将该排除逻辑放入过滤器谓词中。您可以通过它的函数名将谓词直接传递给HTML。
谓词函数是接受一些形参(通常是对象)并返回真或假值的函数。该谓词通常会对数组的每个元素单独求值。在$filter
的情况下,谓词决定是否包含或排除该元素。这意味着您只需要编写该函数来正确地包含正确的元素,同时排除错误的元素。
在angular的$filter
的文档中,谓词有这样的签名:
function(value, index, array)
:谓词函数可用于编写任意过滤器。对于数组中的每个元素调用该函数,该元素、该元素的索引和整个数组本身作为参数。
不必使用所有的输入,通常只需要第一个参数(元素本身)。您的过滤谓词可能如下所示:
$scope.customFilter = function(item, index, array) {
var excluded = item.testResult == 'fail';
//.contains() logic for a search filter
var included = item.name.toLowerCase().indexOf($scope.filterData.name.toLowerCase()) > -1;
return included && !excluded;
};
然后将谓词函数本身传递给HTML中的过滤器:
<div ng-repeat="obj in data | filter:customFilter">
Do stuff with the filtered data
</div>
我已经链接了一个关于plnkr的演示,演示了谓词如何与表单的其他部分交互以包含某些元素同时排除其他元素的基本思想。
关于智能表。我不确定你的智能表期待什么,但如果它只是想要一个$filter
对象,那么你应该能够利用$filter
的predicate
参数。只需将谓词函数(如上面所示)传递到带有filterName:arg1
的自定义过滤器中。我从Todd Motto的页面(第3节:过滤带参数的重复)中学到了这种语法。
筛选定义
//same as your filter, but named a bit better
.filter('appLevelFilter', ['$filter', function($filter){
return function(input, predicate){
return $filter('filter')(input, predicate, false);
}
}])
HTML <div ng-repeat="obj in data | appLevelFilter:customFilter">
Do stuff with the filtered data
</div>
- 如何将页面上的所有电话号码更改为可点击链接,不包括特定类别的元素
- ng消息包括不工作
- 将正则表达式重新分解为不包括空组
- 为什么从JSON文本到类型的转换不包括函数
- XMLHttpRequest调用不包括If Modified Since标头
- 使用 JavaScript 执行一行 PHP(不包括 PHP 文件)
- 捆绑器不包括 .min 文件
- 与冒号(不包括冒号)之间的正则表达式单词匹配
- 包含特殊字符 (!,@,#,&) 不包括其他特殊字符
- Javascript RegEx:如何获取单引号之间的名称(不包括单引号)
- Javascript RegEx匹配URL's,但不包括图像
- Rails不包括用于javascript的require_tree
- 获取JS中特定路径的cookie,不包括根路径
- requireJS优化器不包括嵌套的require调用
- 不包括'+'和'&'正则表达式中的字符
- 如何获取html页面中所有p和h标记的值,不包括所有其他标记
- 使用javascript查找小数前的整数(不包括特殊字符)
- Javascript RegEx:在符号后获取1或2位数字(不包括该符号)
- 如何获取应用程序.js其中不包括压缩代码
- 过滤($filter)从对象列表中匹配值,不包括不必要的属性