【问题标题】:Error: $rootScope:infdig Infinite $digest Loop错误:$rootScope:infdig 无限 $digest 循环
【发布时间】:2023-03-24 08:25:01
【问题描述】:

我和一个朋友在一个名为 userSummary 的除 master 之外的 git 分支上工作。今天早上,我的朋友在进行了一些更改后将分支与 master 合并,但没有删除 userSummary 分支。我将我的分支从userSummary 更改为master,并拉动了master。 现在我的网络应用程序显示一些根范围错误。而且它的行为方式很奇怪。错误是

Error: [$rootScope:infdig] http://errors.angularjs.org/1.4.8/$rootScope/infdig?p0=10&p1=%5B%5B%7B%22ms…2%2C%22oldVal%22%3A%22%5C%222016-10-13T09%3A31%3A36.003Z%5C%22%22%7D%5D%5D  

我已经为此苦苦挣扎了很长时间。任何帮助,将不胜感激。

【问题讨论】:

    标签: angularjs git


    【解决方案1】:

    docs中所见:

    当应用程序的模型变得不稳定并且每个$digest 循环触发状态更改和后续$digest 循环时,就会发生此错误。 Angular 会检测到这种情况并防止无限循环导致浏览器无响应。

    例如,通过在路径上设置监视并随后在值更改时更新同一路径时,可能会发生这种情况。

    $scope.$watch('foo', function() {
      $scope.foo = $scope.foo + 1;
    });
    

    一个常见的错误是绑定到一个每次调用它都会生成一个新数组的函数。例如:

    <div ng-repeat="user in getUsers()">{{ user.name }}</div>
    
    ...
    
    $scope.getUsers = function() {
      return [ { name: 'Hank' }, { name: 'Francisco' } ];
    };
    

    由于getUsers() 返回一个新数组,Angular 判断模型在每个 $digest 循环上都不同,从而导致错误。解决方法是在元素没有改变的情况下返回相同的数组对象:

    var users = [ { name: 'Hank' }, { name: 'Francisco' } ];
    
    $scope.getUsers = function() {
      return users;
    };
    

    $digest 循环的最大允许迭代次数由 TTL 设置控制,该设置可通过$rootScopeProvider 配置。

    【讨论】:

    • 文档无法解决我的问题,这就是我来到这里的原因。我很抱歉,但它没有帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-21
    相关资源
    最近更新 更多