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

2 つの検索フィールドを持つことができる場合は、オブジェクトを 2 番目のパラメーターとして渡すことができます。

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

それ以外の場合は、両方に同じフィールドを使用するカスタム フィルターを作成するか、ドキュメントに記載されている 3 番目のパラメーターとしてカスタム フィルター関数を渡す必要があります。

http://docs.angularjs.org/api/ng.filter:フィルター

于 2012-12-11T06:34:43.547 に答える
16

これがあなたが求めているものかどうかはわかりません。複数のプロパティに一致する 1 つの入力フィールドが必要な場合は、フィルタ関数を に渡す必要があります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 に答える
0

「user.friends | json | filter:{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 に答える