AngularJs - 错误:10 $ digest()迭代达成.中止

use*_*298 9 javascript angularjs angularjs-controller

我正在尝试使用Angular创建Metro Tile类型网格,为了实现这一点,我希望每个tile都是不同的颜色.所以我的行动计划是创建一个随机选择循环内部颜色的函数(使用ng-repeat).这是我到目前为止所拥有的......

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

因此,您可以看到我使用名为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();
};
Run Code Online (Sandbox Code Playgroud)

这一切都很好,瓷砖有不同的颜色,但我不断收到以下错误

错误:达到$ $ digest()迭代.中止!".

我已经看过围绕这个问题的其他帖子,但我无法弄清楚我需要改变什么来让它工作!?任何帮助或方向将不胜感激:)

Joh*_*ter 25

Angular执行摘要功能,以在数据更改时更新DOM.

在摘要期间,它会重新计算您在DOM中绑定的所有值,在本例中{{RandomColorClass()}}.如果它们中的任何一个发生变化,它将再次执行摘要循环(例如,因为某些变量可能取决于已更改变量的值).

它会反复执行此操作,直到连续两个摘要生成相同的值 - 即,没有任何更改.

发生的事情是,当一个摘要发生时,你的RandomColorClass()函数被调用并返回一个不同的值.这会触发一个额外的摘要,RandomColorClass()再次返回一个不同的值,触发另一个摘要......

你能看出这是怎么回事吗?您不应该以这种方式生成随机值 - 而是在您的范围内生成它们并持久化它们.

在您的范围内,一种方法可能是:

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

$scope.GridStockRecords.forEach(function(record) {
  record.colorClass = randomColourClass(); 
});
Run Code Online (Sandbox Code Playgroud)

和HTML:

    <div ng-repeat="stockRecord in GridStockRecords | filter:searchText"
         ng-class="stockRecord.colorClass">
      <div>
        <h6>{{stockRecord.ProductGroupName}}</h6>
      </div>
    </div>
Run Code Online (Sandbox Code Playgroud)


Mar*_*son 5

我在IE10中遇到了同样的问题,问题是我使用window.location重定向.

window.location = "#route/yada";
Run Code Online (Sandbox Code Playgroud)

将代码更改为

$location.path("/route/yada);
Run Code Online (Sandbox Code Playgroud)

这解决了我的问题.= d