2017-06-05 8 views
0

組み込みAngular 1フィルタを使用してオブジェクトのプロパティをフィルタリングしようとしています。私は角度フィルタは、オブジェクトではなく配列を渡すことができるので、私はリファクタリングすることはできませんwebappが設計されている方法、しかし、配列ではなくオブジェクトを受け入れていないことを認識しています。理由は、各オブジェクトをその値で追跡することと非常に効率的です。しかし、データセットではそれが巨大であるという警告があります。 1つのテーブルには最大1000行まで格納できます。あなたのより良い理解を与えるために、私のオブジェクトは、次のようになります。私はオブジェクトではなく配列を渡すが、それは動作しますので、私は方法を考え出す助け場合オブジェクトのng-repeatを指定したng-filter(k、v)

{"UNIQUE-KEY-XYZ-123" : {"name" : "XYZ", "type" : "investment", "book", "ABC"}, "UNIQUE-KEY-LMN-321" : {"name" : "LMN", "type" : "investment", "book", "STU"}, ...} 


<tr><td><input ng-model="foo.book"></td></tr>  
<tr ng-repeat="(key, row) in blotter.rows track by key | filter:foo" ng-class="{flash: blotter.flashList[key]['all']}"> 

フィルタリングが正常に動作しますオブジェクトもあります。一部の人々はthis external moduleを使用して提案しましたが、実装方法が非常に非効率的であると私は信じています。

+0

問題のjsFiddleを追加できますか? –

+0

デフォルトフィルタはオブジェクトに対して機能しません。使用できる場合は、独自のフィルタを作成するか、外部ライブラリを使用することができます。 –

+0

[AngularJS開発者ガイド - カスタムフィルタの作成](https://docs.angularjs.org/guide/filter#creating-custom-filters)を参照してください。 – georgeawg

答えて

0

濾過オブジェクト作成するng-change directiveの使用を検討:ng-changeディレクティブはng-repeatにおけるウォッチャとのダーティチェック機構を使用するよりも効率的である使用

<tr> 
    <td><input ng-model="foo.book" 
      ng-change="filteredRows=myFilter(blotter.rows, foo.book) /> 
    </td> 
</tr>  
<tr ng-repeat="(key, row) in filteredRows track by key" 
    ng-class="{flash: blotter.flashList[key]['all']}"> 
</tr> 

JS

$scope.myFilter = function(data, selector) { 
    var filteredRows = {}; 
    //Code here 
    return filteredRows; 
}; 

をダイジェストサイクル。