Angular.js. Как подсчитать итерации ng-repeat, которые удовлетворяют настраиваемому фильтру

Здесь мой код:

<div ng-show="?" ng-repeat="item in items | notEmpty">
</div>

Фильтр:

Kb.filter("notEmpty", function(){ 
  return function(input){
    var output=[];
    for(var i=0;i<input.length;i++){
      if(input[i]){
        output.push(input[i]);
      }
    }
    return output;
}});

Мне нужно показать/скрыть повторение s в соответствии с количеством фильтрованных элементов в цикле. Каков наилучший способ сделать это?

Спасибо

Ответ 1

ng-repeat выражение позволяет отфильтровать результаты для переменной. Эта переменная будет доступна из текущей области, поэтому вы можете использовать ее в той же области в любом случае:

<p>Number of filtered items: {{filteredItems.length}}</p>

<div 
  ng-show="filteredItems.length > 0" 
  ng-repeat="item in filteredItems = (items | notEmpty)"
>
 {{$index}}
</div>

Ответ 2

Самый простой способ - запустить фильтр в контроллере. Что-то вроде этого:

function MyCtrl($scope, notEmptyFilter)
{
    //$scope.items is put into the scope somehow
    $scope.filteredItems = notEmptyFilter($scope.items);
}

Тогда ваш HTML будет выглядеть примерно так:

<div ng-show="filteredItems.length > 0" ng-repeat="item in filteredItems">
</div>

Ответ 3

Как и в случае с Angular 1.3, вы можете использовать следующий синтаксис для ng-repeat:

variable in expression as alias_expression

То есть:

<p>Number of filtered items: {{filteredItems.length}}</p>

<div ng-repeat="item in items | notEmpty as filteredItems">
 ...
</div>