尝试致电时出现此错误
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”错误,这将导致失败。我不知道为什么。我可以通过在这样的超时中包装来解