2015-10-08 29 views
1

我有10個選擇列表,每個選項有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> 

請指點,謝謝

UPDATE: JS FIDDLE

+0

您是否單獨嘗試兩個過濾器?有人會導致問題還是隻有組合?請儘量縮小問題的範圍。 – lex82

+2

適用於我:http://jsfiddle.net/vnb8jL91/1/請更新小提琴來說明您的問題 – lex82

+0

@ lex82我已更新與問題http://jsfiddle.net/vnb8jL91/2/小提琴結合ng-repeat與過濾器 – sisimh

回答

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; 
    } 
}); 
相關問題