AngularJS排除过滤器?

时间:2015-07-09 18:32:38

标签: javascript html angularjs filter angularjs-ng-repeat

我有一个使用angular的搜索框:

<input type="text"
typeahead="item.name for item in list |
filter: $viewValue:comparator | orderBy: '+name'"/>

我想添加另一个过滤器以从另一个数组中排除某些项目。 类似的东西:

... | exclude: items in excludedList

我不想使用ng-hide;我特意寻找一个过滤器来做到这一点。

1 个答案:

答案 0 :(得分:1)

这看起来像是自定义过滤器的作业:

.filter('excludeItemsByName', function () {
        return function (items, excludedList) {
            var ret = [];
            angular.forEach(items, function (item) {
                if (excludedList.indexOf(item.name) === -1) {
                    ret.push(item);
                }
            });
            // or you could use Array.prototype.filter() in browsers that support it
            return ret;
        };
    })

然后

<input type="text"
typeahead="item.name for item in list |
filter: $viewValue:comparator | excludeItemsByName:['excludeThis','excludeThat'] orderBy: '+name'"/>

(这假设excludedList将是一个平面的字符串列表;它应该足够清楚如何扩展它以支持排除的对象......)

https://docs.angularjs.org/guide/filter#creating-custom-filters