我有以下错误:
错误:[$ rootScope:inprog] $ digest已在进行中 http://errors.angularjs.org/1.2.16/ $ rootScope / inprog?P0 =%24digest
不完全确定这个问题的根源是什么,或者这究竟是什么意思或者阶段"适用"或者"消化"意思?我阅读了该页面,并了解在范围对象和
上调用apply / digestelement.on('mouseup', function() {
scope.$apply(function() {
$scope.doStuff();
});
});
变为:
$apply = function(fn) {
try {
fn();
} finally() {
$digest();
}
}
答案 0 :(得分:1)
如果在调用$scope.apply
函数时调用digest
,则可能会发生这种情况。意思是很可能你的scope.apply不是必需的。
来自Angular Docs :
$digest()
处理当前作用域及其子作品的所有观察者。通常,您不直接在控制器或指令中调用$digest()
。Angular会跟踪我们处理的处理阶段,相关的处理是$ apply和$ digest。尝试重新输入$ digest或$ apply(其中一个已经在进行中)通常是需要修复的编程错误的标志。因此Angular会在发生这种错误时抛出此错误。 Click Here for more details
您的代码提醒了一个需要在早期版本的角度(0.4或0.8)中实现的旧技巧,但就召回而言,您正在使用的角度版本中不需要它。
另请注意,Angular团队为我们提供了diagnose this type of errors的方法:
当您收到此错误时,诊断问题的原因可能相当令人生畏。最好的做法是调查错误中的堆栈跟踪。您需要查找已调用$ apply或$ digest的位置,并找到发生此情况的上下文。
应该有两个电话:
第一个调用是好的$ apply / $ digest,通常会被调用堆栈顶部附近的某个事件触发。
第二个电话是错误的$ apply / $摘要,这是要调查的。
一旦你确定了这个电话,你就可以在堆栈中找到问题所在。
如果在您的应用程序代码中进行了第二次调用,那么您应该查看为什么在$ apply / $摘要中调用此代码。这可能是一个简单的疏忽,也可能适合前面描述的同步/异步方案。
如果第二次调用是在Angular指令内进行的,那么很可能它与前面描述的第二个编程事件触发器场景相匹配。在这种情况下,您可能需要进一步查看树,以便首先触发事件。