Angular Array.length 和数组迭代的自定义过滤器

Angular Custom Filter on Array.length and Array Iteration

我正在尝试编写一个自定义过滤器,它只会在 table 中显示过滤后的项目。

过滤器

app.filter('status', function() {
    return function(input, theStatus) {
        var out = [];

        for (var i = 0; i < input.length; i++) {
            var gem = input[i];
            if (gem.status === theStatus)
                out.push(gem);
        }

        return out;
    };
});

当我在 ng-repeat="gem in gemList | status: 3" 中使用它时,只会显示带有 gem.status = 3 的宝石。这完全符合预期。

但我还想知道我的 gemList 中有多少 gem 的状态为 3。我以为我也可以 {{ gemList.length | status: 3 }},但事实并非如此。有没有办法编写我的过滤器来解决这两个目的?还是我必须为每个案例编写一个唯一的过滤器?

这行得通。

ng-repeat="gem in filteredGems=(gemList | status:3)"

{{filteredGems.length}}

这里发生的是 arr | status: 3 returns 一个应用了过滤器的数组。但是,当您执行 arr.length 时,您使用的不是过滤后的数组,而是导致您出现此问题的原始数组。