Angularjs [$rootScope:inprog] inprogress error

前端 未结 2 1790
春和景丽
春和景丽 2020-12-16 11:31

I am getting angularjs [$rootScope:inprog] error.

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

相关标签:
2条回答
  • 2020-12-16 11:55

    Usually this means that you defined $rootScope.$apply somewhere manually inside of the another angular code which has lifecycle already. This should not be happen in common cases as angular tracks the lifecycle itself. The one common case where it is needed is when you need to update scope from non-angular code (like jquery or old-fashioned js stuff). So please check if you have this somewhere. In case you really need it's better to use safe apply (the common code snippet):

    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);
                 }
             },
         };
    });
    

    Then you can inject this service and make necessary calling by:

    scopeService.safeApply($rootScope, function() {
        // you code here to apply the changes to the scope
    });
    
    0 讨论(0)
  • 2020-12-16 12:07

    [$rootScope:inprog] inprogress error in my case:
    Case 1: It means you're executing two actions at a time.

    Example:

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

    Use $timeout to make sure two actions (function) are not running at the same time.

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

    Case 2: an action has not executed completely.
    Use $timeout to make sure first action has executed.

    $timeout(function () {
        $(element.target).trigger('click');
    }, 300);
    
    0 讨论(0)
提交回复
热议问题