一尘不染

错误:$ digest已经在进行中

angularjs

尝试致电时出现此错误

        function MyCtrl1($scope, $location, $rootScope) {
      $scope.$on('$locationChangeStart', function (event, next, current) {
        event.preventDefault();
        var answer = confirm("Are you sure you want to leave this page?");
        if (answer) {
          $location.url($location.url(next).hash());
          $rootScope.$apply();
        }
      });
    }

MyCtrl1.$inject = ['$scope', '$location', '$rootScope'];

错误是

Error: $digest already in progress

阅读 179

收藏
2020-07-04

共1个答案

一尘不染

复制: 防止在调用$ scope。$ apply()时发生错误$digest。
您收到的错误表明Angular的脏检查已经在进行中。

最新的最佳实践表明,$timeout如果要在下一个 摘要 迭代中执行任何代码,则应使用:

$timeout(function() {
  // the code you want to run in the next digest
});

上一页反应:不要使用此方法

使用安全的申请,例如:

$rootScope.$$phase || $rootScope.$apply();

你为什么不反转条件?

$scope.$on('$locationChangeStart', function (event, next, current) {                
    if (confirm("Are you sure you want to leave this page?")) {
        event.preventDefault();
    }
});
2020-07-04