过滤ng-options

时间:2015-02-27 16:45:41

标签: javascript angularjs

在将Angular更新为1.3之前,我使用的是Angular 1.2。

我使用此过滤器过滤了我的类别列表。它的作用是删除一个与传入的内容重复的类别(我)。

app.filter('CategorySelectFilter', function() {
    return function(cats, me) {
        var filteredCats = angular.copy(cats);
        for (var index in filteredCats) {
            if (me.id == filteredCats[index].id) {
                filteredCats.splice(index, 1);
            }
        }
        return filteredCats;
    };
});

在我的HTML中使用它,一切都很有用。

ng-options="c as c.name for cat in filtered = (cats | CategorySelectFilter: cat) track by cat.id"

更新到Angular 1.3后,我开始从中获取Infdig错误。我不知道发生了什么。

编辑:添加了Plnkr http://plnkr.co/edit/X2cAvRyd3pdjMDOOQKfI?p=preview

它似乎在Plnkr代码中工作正常,但仍然从控制台获得Infdig错误。尝试比较AngularJS的1.2.13和1.3.13中的代码。

1.3.13引发了一堆infdig错误。

1 个答案:

答案 0 :(得分:1)

This answer provides some cool filters to look at。如果您正在进行大量过滤,则可以轻松导入这些库。

I created a fiddle to solve your issue.

或编辑了您的plunker http://plnkr.co/edit/AI1O9Z?p=preview

这是如何使用它。

 ng-repeat="cat in cats | catFilter:'id' "

和过滤器。

app.filter('catFilter', function() {
    return function(cats, key ) {
        return cats.filter( function(elem, index, array ) { 
            return ( array.map(function(item){return item[key];}).indexOf(elem[key]) === index );
        });

    };
});