2013-10-30 24 views
9

我正在嘗試用Angular創建一個Metro Tile類型的網格,爲了實現此目的,我希望每個tile都是不同的顏色。所以我的行動計劃是創建一個函數,它可以在循環中隨機選擇一種顏色(使用ng-repeat)。這裏是我到目前爲止....

<div class={{RandomColourClass()}} ng-repeat="stockRecord in GridStockRecords | filter:searchText"> 
    <div > 
    <h6>{{stockRecord.ProductGroupName}}</h6> 
    </div> 
</div> 

所以你可以看到我設置的類名和一個叫RandomColourClass功能,這裏是JS位

$scope.TileColours = [{colour:'thumbnail tile tile-blue'},{colour:'thumbnail tile tile-green'},{colour:'thumbnail tile tile-red'}]; 

$scope.RandomColourClass = function(){ 
    var randomColour = $scope.TileColours[Math.floor(Math.random() * $scope.TileColours.length)]; 
    return randomColour.colour.toString(); 
}; 

這一切工作罰款和地磚有不同的顏色,但我不斷收到以下錯誤

Error: 10 $digest() iterations reached. Aborting!".

我看了一下圍繞這一問題的其他職位,但我不能找出我需要改變,以得到它的工作!?任何幫助或方向將不勝感激:)

+0

post'GridStockRecords' please –

回答

25

角度執行摘要函數更新您的數據更改時的DOM。

在摘要期間,它會重新計算您在DOM中綁定的所有值,在此例中爲{{RandomColorClass()}}。如果它們中的任何一個發生變化,它將再次執行一個摘要循環(例如,因爲一些變量可能取決於變化的變量的值)。

它會重複執行此操作,直到一行中的兩個摘要導致相同的值 - 即沒有任何變化。

發生什麼事是當發生摘要時,您的RandomColorClass()函數被調用並返回一個不同的值。這會觸發額外的摘要,其中RandomColorClass()再次返回不同的值,這將觸發另一摘要...

你能看出這是怎麼回事?您不應該以這種方式生成隨機值 - 而是在您的範圍內生成並保存它們。

一種做法是,在你的範圍:

function randomColourClass() { /* ... */ }; 

$scope.GridStockRecords.forEach(function(record) { 
    record.colorClass = randomColourClass(); 
}); 

和HTML:

<div ng-repeat="stockRecord in GridStockRecords | filter:searchText" 
     ng-class="stockRecord.colorClass"> 
     <div> 
     <h6>{{stockRecord.ProductGroupName}}</h6> 
     </div> 
    </div> 
+0

讓人感覺完整!謝謝您的幫助! – user2859298

+0

到底發生了什麼事。非常感謝! – zeroliu

1

答案無關的這個特定的問題,但我在這裏將它,因爲它是在谷歌前當你搜索錯誤消息,它花了我一下,直到我找出它:

我有這樣的東西在我看來:

<custom-tag data="[1,2,3]"/> 

自定義標籤的控制器在$scope.data上設置了一個觀察器。這導致AngularJS到BARF因爲每次時間重新檢查它得到了一個新的對象從視圖的data值(記住,數組是一個對象),所以它永遠不會結束正常消化它。

5

我在IE10同樣的問題變成UT的問題是,我使用了window.location重定向。

window.location = "#route/yada"; 

改變了代碼,以

$location.path("/route/yada); 

這解決了我的問題。 = D

+0

對於這些重定向方法很陌生:$ window.location.href可以增加'$ digest()迭代到達。中止錯誤',$ location.path()有時不起作用。我解決了$ location.url(「route/yada」); –

0

當我錯誤地鍵入ng-class =「submit()」而不是ng-click =「submit()」時,遇到此錯誤。我無法想象其他人做出這樣一個愚蠢的錯誤,但爲了記錄,這是另一種創建10 $ digest()迭代達到中止的方式!

相關問題