Angular: 从数组中过滤多项

Angular: filtering multiple items from array

我正在创建一个应用程序,您可以在其中通过单击类别按钮来过滤项目。大多数项目都有多个类别。当按下类别按钮时,我创建了一个包含按下类别的数组。

每个要过滤的项目都有一个数组,用于表示它所属的类别。 示例:

项目 1 - 类别:动物、棕色、尾巴

项目 2 - 类别:动物,白色

项目 3 - 类别:人类、高

当我按下类别按钮 "animal" 时,它只显示项目 1 和 2,然后当我按下棕色时,它只显示项目 1。当我取消选择所有项目并按此顺序按下时 -动物, 尾巴.它没有显示任何内容:/

我查看了一些类似的主题,但没有找到可靠的方法。

是否可以在不创建自定义过滤器的情况下做到这一点?

如果您改变主意添加 "custom filter",这里应该可以。

angular.module('myApp').filter('matchesAll', function() {
    return function(items, relevant, property) {
        if(!(relevant && relevant.length)){
            return items; // No categories to compare with, return everything
        }

        property = property || 'categories'; // By default look at categories

        return items.filter(function(item) {
            var itemProps = item[property];
            return relevant.every(function(relevantCategory){
                return itemProps.indexOf(relevantCategory) !== -1;
            });
        });
    };
});

这将像任何 ngRepeat 过滤器一样使用:

ng-repeat="item in items | matchesAll:selectedCategories"

JSFiddle 演示:http://jsfiddle.net/3an5wr0b/