2017-02-14 3 views
2

わかりました。Angular ng-repeat filter:フィルタフィールドを指定する方法は?

私は単純な角度フィルタを実行したいのですが、私の配列のどのフィールドをフィルタに使うかを指定する必要があります。

基本的なフィルタは次のとおりです。

<li ng-repeat="person in app.people | filter: app.search"> 

1フィールドフィルタは、次のとおりです。

<li ng-repeat="person in app.people | filter: {Surname: app.search}"> 

私は指定することができますどのように複数のフィールドのフィルタのために? 何かのように:

<li ng-repeat="person in app.people | filter: {Name,Surname: app.search}"> 
ここ

基本フィルタと1フィールドフィルターとPlunker:この場合https://jsfiddle.net/odLz1v71/3/

答えて

2

、私はあなたがこのようなあなたのコントローラにフィルタ機能を追加することをお勧め:

vm.searchFilter = function(item){ 
    // Add your own search logic here 
    return item.Name.includes(vm.search) || item.Surname.includes(vm.search); 
} 
その後、

そして、このようにそれを使用します。私は

<li ng-repeat="person in app.people | filter: app.searchFilter"> 
+0

[OK]を、私はAngularはネイティブにこの動作を持たないと信じられません...このフィルタ関数を使用しますが、私は両方のプロパティと値を検索するために "toLowerCase()"を追加します。 Tksたくさん。 –

+0

Angularチームは、フィルタリングのためのあらゆるユースケースを予測することも、インクルードすることもできません。これは、膨大な量の膨らみをもたらし、新しい急速な学習曲線を持つフレームワークの新しいユーザーを混乱させます。 –

+0

'toLowerCase()'を追加することは良い考えです。これは、「//ここに独自の検索ロジックを追加する」というコメントの意味です。 :-) –

0

あなたが直接、基本フィルタでこれを行うことができると思いますが、あなたはそれがあなたのために、このチェックを行います使用するfilterフィルタする機能を提供することができません。

vm.checkName = function (value) { 
    return value.Name.indexOf(vm.search) > -1 || value.Surname.indexOf(vm.search) > -1; 
    }; 

参照:https://jsfiddle.net/odLz1v71/4/

関連する問題