自定义过滤器10 $消化迭代到达?

时间:2015-10-08 07:30:54

标签: angularjs filter angularjs-ng-repeat

我有10个选择列表,每个选项超过10个,并且由于角度设置为10的最大摘要循环次数而出现此错误,

在这些选择列表上我应用这两个自定义过滤器并导致错误:

  

达到10 $ digest()次迭代。中止

app.filter('sortFilter', function() {
    return function(items) {
        items.sort(function (item1, item2) {
          return (item1.order > item2.order ? 1 : -1);
        });
        return items;
    };
});


app.filter('removeDuplicationFilter', function() {
    return function(items, thisOption) {
        var options=[];
        angular.forEach(items, function(item) {
             if ( item.order == 0 ) {
                options.push(item);
            } else if (thisOption == item.name) {
                options.push(item);
            }
        });
        return options;
    };
});

<div ng-repeat="field in fields|sortFilter" ng-if="filterField.order">
 <select ng-model="field.name" ng-options="item.name as item.label for item in fields | removeDuplicationFilter:field.name"></select>
</div>

请咨询,谢谢

更新: JS FIDDLE

1 个答案:

答案 0 :(得分:1)

问题是你的sortFilter修改了它应该过滤的值,即它会改变模型。这又会触发另一个摘要周期,并再次进行排序。您可以通过返回数组的排序副本来轻松修复它:

myApp.filter('sortFilter', function() {
    return function(items) {
        var result = items.concat([]); // copies the array
        result.sort(function (item1, item2) {
          return (item1.order > item2.order ? 1 : -1);
        });
        return result;
    }
});