我想對我的過濾器中的對象應用一個轉換,這導致返回一個新對象的數組。這是因爲我想在應用轉換後過濾對象並顯示轉換結果。然而,我最終得到了無限的摘要,因爲我顯示的對象與我放入的對象不同(比較它們的$$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