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>
Ответ 4
Я нашел это
Как отобразить длину отфильтрованных данных ng-repeat,
который описывает получение счетчика после фильтрации списка