Я сделаю это довольно простым. У меня есть:Дизайн шаблона AngularJS для ng-повторения по массиву массивов
<div ng-repeat="group in topLevelGroups">
....
<div ng-repeat="item in group.items | filter:itemFilter">
....
</div>
</div>
Это работает все хорошо и прекрасно, но я хочу показать где-то общего количества фильтров приводит во всех «группе» с.
Для достижения этой цели, я переместил фильтр в контроллер, например, так:
<div ng-repeat="item in filterItems(group)">
// in controller:
$scope.filterItems = function(group) {
var ret = $filter('filter')(g.items, $scope.query);
g.filteredItemCount = ret.length
return ret
};
$scope.getTotalFiltered = function() {
return $scope.data.reduce(function (prev,cur) {
return prev + cur.filteredItemCount
}, 0)
}
Так, по существу, контрейлерный свойство «filteredPostLength» на к группе, когда происходит фильтр, и использовать чтобы суммировать это свойство по всем группам, чтобы получить итоговые отфильтрованные результаты.
Это работает очень хорошо, но он чувствует себя довольно хак и мне было интересно, если там было чище, Угловым путь для достижения этой цели.
Любой вход очень ценится, спасибо!
Большое спасибо за объяснение, почему мой метод был намного более неэффективным!Иногда трудно точно знать, как работает Angular. – cemulate
На самом деле, теперь, когда я воплотил это в жизнь, моя работа стала намного хуже. Я думаю, что это из-за того, что я копирую весь набор данных каждый раз при нажатии клавиши (мой набор данных большой, и каждый «элемент» имеет много свойств). Любые предложения по управлению огромным набором данных? – cemulate
Можете ли вы дать оценку размера ваших данных, чтобы я мог имитировать его? Спасибо! – jvandemo