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

Random function triggering $digest() error

本文关键字:错误 digest 函数 随机      更新时间:2023-09-26

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

未捕获错误:已达到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>
不要将$scope属性直接设置为函数。让scope属性引用函数的结果:
var r = function(){
    var rando = Math.floor(Math.random()*100);
    return rando;
  }; 
$scope.randomNum =r();

HTML:

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

点击此处

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

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

错误发生的原因我无法理解…

您提到的错误通常发生在您对属性创建更改循环时。

例如,当您观察某个属性的更改,然后在侦听器上更改该属性的值时。请确保您的代码不存在这种情况。