AngularJS自定义过滤器在中继器上损坏

时间:2013-10-03 01:59:33

标签: angularjs filter angularjs-filter

我正在尝试在AngularJS中对转发器应用过滤器,但我正在发生一个奇怪的错误。当页面加载时,转发器就像复制数据一样:6行而不是3行。然后一秒钟后转到3行。当我删除过滤器时,它应该工作3行。这是我的过滤器:

JS:

app.filter('flagged', function() {
return function(input,flag_filters) {
    var filteredElements = [];
    var filters = ["ALL"];
    if(flag_filters.length > 0)
        filters = flag_filters;
    angular.forEach(input,function(element) {
        angular.forEach(filters,function(color){
            if(angular.equals(element.flag,color) || angular.equals("ALL",color))
                filteredElements.push(element);
        });
    });
    return filteredElements;
};

});

查看:

tr ng-repeat="file in files | flagged:filtered | orderBy:'date':true"

数据(文件): [{    “title”:“假Data.docx”,    “标志”:“红色”,    “日期”:“2013年9月13日” },{    “title”:“假Data.docx”,    “标志”:“红色”,    “日期”:“2013年9月15日” },{    “title”:“假Data.docx”,    “标志”:“绿色”,    “日期”:“2013年9月14日” }]

filtered=["red","green"]

为什么这样表现?

1 个答案:

答案 0 :(得分:1)

不确定为什么需要forEach(input,...),因为过滤器会自动应用于转发器中的每个文件。

除非你想比较对象/数组,否则使用JavaScript等式x === y而不是angular.equals()。

出于性能原因,您应该注意转发器中的复杂过滤器。