我想对我的过滤器中的对象应用一个转换,这导致返回一个新对象的数组。这是因为我想在应用转换后过滤对象并显示转换结果。然而,我最终得到了无限的摘要,因为我显示的对象与我放入的对象不同(比较它们的$$ids
时)。我的想法来解决这个如下:AngularJs - ngRepeat与返回一个新对象的过滤器
使用跟踪语句,比如
track by item.id
并指定原始对象ids
每个变换对象。虽然我的所有对象目前确实有id
,这似乎是一个好主意,因为它使过滤器更常规 - 原始对象必须有一个id
,改造不得设置id
(因为它会被覆盖)等。指定原始对象的
$$id
的变换对象。这似乎是hackish,根据我的理解$$id
应该是只读的。返回的基础上改造的过滤结果为原始对象的一个子集。这可能会导致性能问题,因为转换需要在过滤器和显示表达式中应用,而且我必须通过转换/过滤项目来回环以选择正确的原始返回。
这里是过滤器:
listModule.filter('ui.filter.transformFilter',
['$filter',
'$id',
function($filter, $id)
{
var Filter = $filter('filter');
return function(objects, transformer, expression) {
// precondition- we need a list of objects
if (!_.isArray(objects)) {
return objects;
}
var transformed = [];
for (var i = 0; i < objects.length; i++) {
transformed[i] = transformer(objects[i]);
}
return filtered = Filter(transformed, expression);
}
}]
);
这里是我怎么想使用它:
<tr ng-repeat="item in list.items | ui.filter.transformFilter:list.transformerFunction:list.search" ng-click="list.select({'item': item})" class="list-item">
<td ng-repeat="label in list.labels" ng-bind-html="item[label.key]"></td>
</tr>
哦,最好ngClick
返回原来的对象,但我可以总是围绕它包装一个功能来查看。
小提琴? Plunker? – Stewie
我想我知道解决方案:)我正在处理它。 – m59
你有'list.labels'的一些样本数据吗? – m59