2017-06-05 68 views
0

我正在使用内置的Angular 1过滤器并尝试过滤出对象的属性。我知道角过滤器不接受一个对象而是一个数组,但是,webapp的设计方式我不能重构,所以我可以传递一个数组而不是一个对象。原因是跟踪每个对象的价值是非常有效的。但是对于数据集的警告是它很大。一个表格最多可以包含1000行。为了让您更好的了解,我的目标是这样的:ng-filter with ng-repeat for objects(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创建过滤的对象:

<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; 
}; 

使用ng-change指令比使用在ng-repeat观察者和的脏检查机制更有效消化周期。