我有global filter
根据文字输入过滤数据。
<search-box ng-model="vm.filter.keyword"></search-box>
而且,我们使用像这样的过滤器
<tr ng-repeat="group in vm.groups | searchGlobal:vm.filter.keyword
我的过滤器如下:
.filter('searchGlobal',
function searchGlobal () {
return function searchGlobal (searchValArr,filterText) {
var filteredData = [];
for(var i = 0; i <searchValArr.length; i++) {
if (searchValArr[i].name.toLowerCase().indexOf(filterText.toLowerCase()) !== -1 ||
searchValArr[i].id.indexOf(filterText) !== -1) {
filteredData.push(searchValArr[i]);
}
}
return filteredData;
};
});
现在,这就是问题所在。
要查找的字段可能不是 name
和id
。
在某些情况下,他们可能 name
,phone_numbers
,
name
,age
,refNumbers
。
如何相应处理过滤器内的场景逻辑?
答案 0 :(得分:1)
您可以添加一个参数来检查您想要的属性
<tr ng-repeat="group in vm.groups | searchGlobal:vm.filter.keyword:vm.filter.listKeys
.filter('searchGlobal',
function searchGlobal () {
return function searchGlobal (searchValArr,filterText, listKeys) {
var filteredData = [];
var listIdAdd = [];
if (angular.isUnDefined(listKeys) || !angular.isArray(listKeys)) {
listKeys = ['name', 'id'];
}
for(var i = 0; i <searchValArr.length; i++) {
for (var j = 0; j < listKeys.length; j++) {
if (searchValArr[i][listKeys[j]].toLowerCase().indexOf(filterText.toLowerCase()) !== -1 &&
listIdAdd.indexOf(searchValArr[i].id === -1)) {
filteredData.push(searchValArr[i]);
listIdAdd.push(searchValArr[i].id);
}
}
}
return filteredData;
};
});
希望这个帮助
答案 1 :(得分:0)
您可以创建一个过滤器,检查是否有任何对象键包含关键字。
我创建了一个简单的示例here。
过滤器功能如下所示,请注意它使用了一些现代JS功能,如String.includes
和angular.module("myApp")
.filter("searchGlobal", function(){
return function(data, keyword){
// Return a filtered array of items in the initial array
return data.filter(function(obj){
// Check if any (some) of the object keys contains the keyword
return Object.values(obj).some(function(value){
return value.includes(keyword);
});
});
};
});
,如果需要较旧的浏览器支持,可以进行交换。
import (
"github.com/spf13/cobra"
"git.domain.com/x/y/tlsgenerate"
)
func main() {
rootCmd.AddCommand(tlsgenerate.CobraCommand)
}