随机函数触发$ digest()错误

时间:2013-07-10 04:20:19

标签: javascript angularjs

我正在处理我的第一个角应用程序,并收到以下错误:

  

未捕获错误:达到10 $ digest()次迭代。中止!

我认为我已将源代码与使用random()函数隔离开来了。就我读到的关于这个错误的内容而言,这似乎是有意义的(https://github.com/angular/angular.js/issues/705)。但是,我不知道如何避免这个错误。

我用这个简单的代码重新创建了错误:

randtest.js:

   function FirstCtrl($scope) {
      $scope.randNum= function(){
        var rando = Math.floor(Math.random()*100);
        return rando;
      };      
    }

的index.html

<!doctype html>
<html ng-app>
  <head>
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.0.7/angular.min.js"></script>
    <script src="randtest.js"></script>
  </head>
  <body>
     <div ng-controller="FirstCtrl">
      <h1>{{randNum()}}</h1>
    </div>
  </body>
</html>

2 个答案:

答案 0 :(得分:1)

不要将$ scope属性直接设置为该函数。让scope属性引用函数的结果:

var r = function(){
    var rando = Math.floor(Math.random()*100);
    return rando;
  }; 
$scope.randomNum =r();

HTML:

<h1>{{randomNum}}</h1>

Plunk here

更新 - 不将计算包装在函数中似乎也避免了错误:

$scope.randomNum = Math.floor(Math.random()*100);

错误发生的原因超出了我的范围......

答案 1 :(得分:0)

当您创建更改属性的循环时,通常会出现您提到的错误。

例如,就像当您监视某个属性的更改,然后在侦听器上更改该属性的值时。 确保您的代码没有这种情况。