17

我有如下定义的用户对象。

$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>

每当我在这里搜索时,我都会得到姓名、年龄和性别的结果。但我只想搜索姓名和年龄,我不想搜索性别。谁能帮助我如何实现这一目标?

4

5 回答 5

21

如果您可以有两个搜索字段,则可以将对象作为第二个参数传递来实现此目的

<div ng-repeat="friend in user.friends | filter:{name:searchNameText, age:searchAgeText}">

否则,您需要编写自定义过滤器以对两者使用相同的字段,或者将自定义过滤器函数作为文档中描述的第三个参数传递。

http://docs.angularjs.org/api/ng.filter:filter

于 2012-12-11T06:34:43.547 回答
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/

于 2012-12-11T13:38:13.890 回答
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>
于 2015-09-11T14:49:53.950 回答
0

“user.friends 中的朋友 | json | 过滤器:{something:somethingtext}”

http://docs-angularjs-org-dev.appspot.com/api/ng.filter:json

于 2013-07-10T20:51:02.190 回答
0

另一种可能的方法是创建一个聚合字段,该字段包含您要过滤的所有字段的值,并且仅对其进行过滤。

于 2014-06-20T18:13:55.490 回答