2013-04-23 70 views
2

我試圖一次顯示N個物品塊中的一堆物品。我需要將項目分塊,因爲標記必須是表格/網格(每組N個項目有一行,然後是每個項目的一列)。這裏有一個簡單的嘗試:爲什麼此分組角度過濾器會導致摘要循環?

app.filter('inGroupsOf', function() { 
    return function (input, groupSize) { 
     if (!input) { 
      return []; 
     } 
     var result = []; 
     for (var index = 0; index < input.length; index++) { 
      var groupIndex = Math.floor(index/groupSize); 
      if (!result[groupIndex]) { 
       result[groupIndex] = []; 
      } 
      result[groupIndex].push(input[index]); 
     } 
     return result; 
    }; 
}); 

<div ng-controller="Ctrl"> 
    <div ng-repeat="itemGroup in items | inGroupsOf:7"> 
     <span ng-repeat="item in itemGroup">{{item.name}}</span> 
    </div> 
</div> 

(完整版在這裏:http://jsfiddle.net/bradleybuda/twhVj/3/

這將導致 「10 $摘要()迭代達到」 錯誤。我已經看過this question的接受答案,但那裏的建議不適用於我(除了覈對過濾器並在控制器中執行此操作)。有沒有什麼方法可以用模板/過濾器進行這種ng-repeat工作?在控制器中做它感覺很難看。

回答

0

的無限循環,因爲在控制器線路12的發生:

result[groupIndex] = []; 

的$消化循環沒有發生,因爲要創建一個定義環路內的陣列,但是因爲你嵌套這些新的陣列

var result = []; 

即使你創建你之外的嵌套數組的for循環會出現同樣的錯誤:你在第8行創建了一個陣列內

嵌套對象也會出現同樣的情況。至於「爲什麼」發生這種情況,我不太確定。我已經閱讀了documentation,但仍然不明白爲什麼數組或對象的嵌套會導致發生$ digest循環。用一個字符串或一個數字替換嵌套數組,並且你是黃金。

我想在這種情況下,邏輯必須移回控制器,而不是稱爲過濾器。

相關問題