Angular $ filter可以对Object Array进行字符串模糊搜索,
但是我的每个对象都有一个base64 pic的属性。
var MyObjects = [{
property1: 'ab',
property2: 'cd',
pic: '4AAQSkZJRgABAQEASABIAAD/2wBDAAMCAgMCAgMDAwMEAwMEBQgFBQQEBQoHBw.....'
}, {
property1: 'ef',
property2: 'gh',
pic: '4AAQSkZJRgABAQEASABIAAD/2wBDAAMCAgMCAgMDAwMEAwMEBQgFBQQEBQoHBw.....'
}, {
....
}],
result = $filter('filter')(MyObjects, $scope.searchText);
我怎样才能在模糊搜索中除了pic属性?
答案 0 :(得分:1)
Angular的过滤器可以使用函数作为过滤数组的参数。过滤器将选择函数返回true的项目。
您可以使用此功能来实现您的目标。
Here is the official documentation
因此,您可以执行以下操作,仅将搜索文本与您想要的两个属性进行比较:
var filterFunction = function(item) {
var val = $scope.searchText
return item.property1.indexOf(val || '') !== -1 || item.property2.indexOf(val || '') !== -1;
}
result = $filter('filter')(MyObjects, filterFunction, $scope.searchText);
答案 1 :(得分:1)
这是我最终实现它的方式。 Angular自定义过滤器似乎是解决此类问题的方法。 You can find more about them from Angular,但在此实施中,您可以添加另一个&& key != "unwantedKey"
来添加您想要留下的任何其他字段。键的值必须是indexOf工作的字符串,因此typeof
部分确保我们不会获得任何数字等ID。
$scope.search = function(item){
for (var key in item){
if (typeof key === "string" && key != "pic"){
if(item[key].indexOf($scope.query) > -1){
return true;
}
}
}
return false;
};