角.js。如何计算满足自定义过滤器的 ng-repeat 迭代
Posted
技术标签:
【中文标题】角.js。如何计算满足自定义过滤器的 ng-repeat 迭代【英文标题】:Angular.js. How to count ng-repeat iterations which satisfy the custom filter 【发布时间】:2013-11-08 23:45:32 【问题描述】:这是我的代码:
<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>
【讨论】:
谢谢。我不知道我可以做这样的语法:ng-repeat="item in filteredItems = (items | notEmpty)
谢谢!不敢相信我们有这样的语法
到底谁会发明这样的语法?疯了,不是吗? <div ng-repeat="entry in filteredItemCounters[$index] = (day.items | filter:filterItemsFn) | orderBy:['-meta.ago', 'meta.review', 'meta.star', '-orig.iso']" ng-init="orig=entry.orig; meta=entry.meta;">
从 Angular 1.3 开始,您可以使用 variable in expression as alias_expression
完美。按预期工作。谢谢。【参考方案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】:我找到了这个
How to display length of filtered ng-repeat data,
表示过滤列表后获取计数
【讨论】:
以上是关于角.js。如何计算满足自定义过滤器的 ng-repeat 迭代的主要内容,如果未能解决你的问题,请参考以下文章
如何仅基于用户角色 Drupal 自定义 drupal 过滤器