角.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) 谢谢!不敢相信我们有这样的语法 到底谁会发明这样的语法?疯了,不是吗? &lt;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;"&gt; 从 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 过滤器

角材料设计 - 如何添加自定义按钮颜色?

vue自定义指令(过滤器/函数)保留小数点后两位

Vue自定义指令组件过滤器如何创建

如何使用创建的自定义 IBDesignable 类从情节提要中更改按钮的角半径

formArray的角异步自定义验证器