0

我正在尝试在 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":"Fake Data.docx", "flag":"red", "date":"13 Sept 2013" },{ "title":"Fake Data.docx", " flag":"red", "date":"15 Sept 2013" },{ "title":"Fake Data.docx", "flag":"green", "date":"14 Sept 2013" }]

filtered=["red","green"]

为什么会有这样的表现?

4

1 回答 1

1

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

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

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

于 2013-10-03T03:51:22.227 回答