我的用户对象定义如下。
$scope.user = [{id: 1, friends:
[
{name: 'John', age: 21, sex: 'M'},
{name: 'Brad', age: 32, sex: 'M'}
]
}]
我有以下代码:
<input type="text" ng-model="searchText">
<div ng-repeat="friend in user.friends | filter:searchText">
{{friend.name}} {{friend.age}}
</div>
每当我搜索时,我都会得到姓名,年龄和性别的结果。但我想只搜索姓名和年龄,我不希望性别可以搜索。任何人都可以帮我解决这个问题吗?
答案 0 :(得分:21)
如果您可以有两个搜索字段
,则可以将对象作为第二个参数传递来实现此目的<div ng-repeat="friend in user.friends | filter:{name:searchNameText, age:searchAgeText}">
否则,您需要编写自定义过滤器以对两者使用相同的字段,或者将自定义过滤器函数作为文档中描述的第三个参数传递。
答案 1 :(得分:16)
我不确定这是不是你所追求的。如果您想让一个输入字段匹配多个属性,则需要将过滤函数传递给filter
。
$scope.user = {id: 1, friends: [{name: 'John', age: 21, sex: 'M'}, {name: 'Brad', age: 32, sex: 'M'}, {name: 'May', age: 64, sex: 'F'}]};
$scope.searchFilter = function (obj) {
var re = new RegExp($scope.searchText, 'i');
return !$scope.searchText || re.test(obj.name) || re.test(obj.age.toString());
};
这是一个小提琴的例子 http://jsfiddle.net/fredrik/26fZb/1/
答案 2 :(得分:1)
这不是达到你想要的最干净的方法,但它是使用标准ng-repeat过滤器完成OR过滤器的最简单方法。
<强>控制器:强>
$scope.user = [{id: 1, friends:
[
{name: 'John', age: 21, sex: 'M'},
{name: 'Brad', age: 32, sex: 'M'}
]
}]
$scope.buildSearchData = buildSearchData;
function buildSearchData(friend){
return friend.name + ' ' + friend.age;
}
<强> HTML 强>
<input type="text" ng-model="searchText">
<div ng-repeat="friend in user.friends | filter:{searchData:searchText}"
ng-init="friend.searchData = buildSearchData(friend)">
{{friend.name}} {{friend.age}}
</div>
答案 3 :(得分:0)
“朋友在user.friends | json | filter:{something:somethingtext}”
http://docs-angularjs-org-dev.appspot.com/api/ng.filter:json
答案 4 :(得分:0)
另一种可能的方法是创建一个聚合字段,其中包含要连接的所有字段的值,并且只对其进行过滤。