当前位置: 首页 > 面试题库 >

错误:$ digest已经在进行中

陶柏
2023-03-14
问题内容

尝试致电时出现此错误

        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

问题答案:

复制: 防止在调用$ 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();
    }
});


 类似资料:
  • 问题内容: 我发现自从以角度构建应用程序以来,我需要越来越多地手动将页面更新到我的范围。 我唯一知道的方法是从控制器和指令的范围进行调用。问题是它不断向显示以下内容的控制台抛出错误: 错误:$ digest已经在进行中 有谁知道如何避免这种错误或以不同的方式实现相同的目的? 问题答案: 不要使用此模式 -最终将导致更多错误,无法解决。即使您认为它可以修复某些问题,也没有。 您可以通过检查来检查a

  • 有没有人知道如何避免这个错误,或者实现同样的事情,但以不同的方式?

  • 问题内容: 我们正在使用selenium进行一些测试。我们为此专用Windows XP VM,每个VM上都有一台seleniumRC服务器,而该VM上没有其他进程在运行。我们为每个测试打开和关闭selenium会话。测试完成时总是调用selenium.stop()。很多时候(每30个中就有1个)挂起一个测试,当我查看已分配给它的计算机的桌面时,会看到一个弹出窗口,显示“ Firefox已经在运行,

  • 我知道在摘要周期中手动调用或会导致$digest已经在进行中错误,但我不知道为什么我在这里得到它。 这是一个包装的服务的单元测试,该服务足够简单,它只是防止对服务器进行重复调用,同时确保试图进行调用的代码仍然获得预期的数据。 单元测试也非常简单,它使用来预期请求。 当调用时出现“$digest ready in progress”错误,这将导致失败。我不知道为什么。我可以通过在这样的超时中包装来解