我正在使用内置的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,但我相信它的实现方式非常低效。
答案 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
中的观察者和摘要周期的脏检查机制更有效。