Angularjs [$rootScope:inprog] 进行中错误

Posted

技术标签:

【中文标题】Angularjs [$rootScope:inprog] 进行中错误【英文标题】:Angularjs [$rootScope:inprog] inprogress error 【发布时间】:2014-05-09 03:07:40 【问题描述】:

我收到 angularjs [$rootScope:inprog] 错误。

Error: [$rootScope:inprog] http://errors.angularjs.org/1.2.7/$rootScope/inprog?p0=%24digest.

这是函数调用

 Members.get(, function (response)  // success
   $scope.family_mem = response.data;    
  , function (error)  // ajax loading error

    Data.errorMsg(); // display error notification
  );

在控制台中,我通过 php 控制器函数获取结果。但没有更新 $scope.family_mem,而是转到错误部分。 这是指令

myApp.directive('mySelect', function() 
  return
    restrict: 'A',
    link: function(scope, element)
      $(element).select2();
    
  ;
);

【问题讨论】:

我认为您正在使用缩小的 angularjs 源代码。尝试使用angular.js 而不是angular.min.js,这将提供有关错误的详细信息。 当使用 angular.js 获取摘要进行中错误 【参考方案1】:

通常这意味着您在另一个已经具有生命周期的角度代码中手动定义了 $rootScope.$apply 。这不应该在常见情况下发生,因为角度跟踪生命周期本身。需要它的一种常见情况是当您需要从非角度代码(如 jquery 或老式 js 东西)更新范围时。所以请检查你是否在某个地方有这个。如果你真的需要,最好使用安全应用(通用代码sn-p):

angular.module('main', []).service('scopeService', function() 
     return 
         safeApply: function ($scope, fn) 
             var phase = $scope.$root.$$phase;
             if (phase == '$apply' || phase == '$digest') 
                 if (fn && typeof fn === 'function') 
                     fn();
                 
              else 
                 $scope.$apply(fn);
             
         ,
     ;
);

然后您可以通过以下方式注入此服务并进行必要的调用:

scopeService.safeApply($rootScope, function() 
    // you code here to apply the changes to the scope
);

【讨论】:

数据库中特定数量的数据没有显示错误。在限制之后它显示错误 好的。我想问题可能出在服务器端,但是您提到的错误是您处理逻辑时的另一个错误?错误发生在哪里?在 Data.errorMsg()?其他地方? 我不知道进度错误发生在哪里。但 Data.errorMsg() 显示另一个自定义错误。 您应该更好地调试它,至少要了解它发生在哪里,以便我们为您提供帮助。否则jsfiddle会很好。还有什么是你的实际问题 - 这个角度错误或从服务器传输数据失败的问题? 我猜 $scope.family_mem 正在使用预输入。那是你正在进行的错误【参考方案2】:

[$rootScope:inprog] 在我的情况下进行中错误:情况 1: 这意味着您一次执行两个操作。

示例:

goView();
hidePopOver(); //Will trigger error

使用 $timeout 确保两个动作(函数)不会同时运行。

goView();
$timeout(function () 
    hidePopOver();
, 300);

情况 2:动作没有完全执行。 使用 $timeout 确保第一个操作已执行。

$timeout(function () 
    $(element.target).trigger('click');
, 300);

【讨论】:

【参考方案3】:

我遇到了同样的问题,但 time delay 解决了我的问题,就像一个魅力。

$timeout(function () 
    $(element.target).trigger('click');
, 300);

如果触发器在 jquery/javascript 端。

setTimeout(function () 
    $(element.target).trigger('click');
, 300);

【讨论】:

以上是关于Angularjs [$rootScope:inprog] 进行中错误的主要内容,如果未能解决你的问题,请参考以下文章

初识AngularJS

AngularJs初识

[angularjs] angularjs系列笔记简介

[angularjs] angularjs系列笔记事件

AngularJS

[angularjs] angularjs系列笔记模型