2017-04-02 6 views
0

私はAngularを学んでいます。以下のコードは、<select multiple>コントロールに基づいてテーブルの行を動的に表示/非表示します。AngularJSのフィルタリングはアレイ上で繰り返されます

コードは動作しますが、data-ng-ifの式をカスタムフィルタを作成せずにフィルタ式に変換する方法があるのだろうかと思います。また、どちらがパフォーマンス面でより良いアプローチであるかもわかりません。

<select id="psgs" data-ng-model="ctrl.showSubGroups" 
    ng-options="item.id as item.name group by item.productGroup.name for item in ctrl.productSubGroupList" 
    multiple> 
</select> 

<tr 
    data-ng-if="ctrl.showSubGroups.indexOf(product.productSubGroup.id) > -1" 
    data-ng-repeat="product in ctrl.productList | filter: ??? | orderBy: ctrl.seq"> 
    ... 
</tr> 
+0

どのような種類のフィルタリングが必要ですか?任意のユースケース – anoop

+0

'ng-if'とまったく同じですが、フィルタ式として使用します。 – Arthur

+0

再び、ng-if = "$ even"のような多くのシナリオがありますが、奇妙な結果を除外することができます。これはすべてあなたのユースケースに依存します。特定の要件がある場合は、それを問題にしてください。 – anoop

答えて

1

あなたが達成することができ、そのカスタムフィルタを使用して、各反復でng-ifを持つと比較して、それはより良いアプローチです。レンダリングされないものに対してはループを繰り返さないでください。

ここで説明します。あなたのHTMLには、次のように(私たちが作成したカスタムフィルタ機能である)customFilterを使用します。

ctrl.customFilter = function(product) { 
    return ctrl.showSubGroups.indexOf(product.productSubGroup.id) > -1 
} 

ここでは簡単です:

<tr 
    data-ng-repeat="product in ctrl.productList | filter: ctrl.customFilter | orderBy: ctrl.seq"> 
    ... 
</tr> 

を今、あなたのコントローラでは、あなたはこのようなcustomFilter機能を持つことができますworking exampleサンプルデータ付き

+1

ありがとうございます私はドキュメントから考えたよりも簡単です:) – Arthur

+0

@Arthur in Angularほとんどのものはdocsで示されているよりも簡単です:D私は助けることができてうれしい – tanmay

関連する問題