ng-filter with ng-repeat for objects(k,v)

时间:2017-06-05 14:30:02

标签: javascript html angularjs

我正在使用内置的Angular 1过滤器并尝试过滤掉对象的属性。我知道Angular Filters不接受Object而不是Array,但是,webapp的设计方式我无法重构,所以我可以传递一个数组而不是一个对象。原因与跟踪每个对象的值非常有效有关。虽然数据集的警告是它是巨大的。一个表最多可包含1000行。为了让您更好地理解,我的对象看起来像这样:

{"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,但我相信它的实现方式非常低效。

1 个答案:

答案 0 :(得分: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中的观察者和摘要周期的脏检查机制更有效。