AngularJS:调用$ scope $ apply()时防止错误$ digest已经在进行中
-最终将导致更多错误,无法解决。即使您认为它可以修复某些问题,也没有。
您可以$digest
通过检查来检查a 是否已经在进行中$scope.$$phase
。
if(!$scope.$$phase) {
//$digest or $apply
}
$scope.$$phase
将返回,"$digest"
或者"$apply"
如果正在进行$digest
或$apply
。我认为这些状态之间的区别在于,$digest
它将处理当前范围及其子项$apply
的监视,并将处理所有范围的监视者。
就@ dnc253而言,如果您发现自己打电话$digest
或$apply
经常打电话,则可能是做错了。通常,由于Angular无法触发DOM事件而需要更新作用域的状态时,我通常需要进行摘要。例如,当一个Twitter引导模态被隐藏时。有时DOM事件在a$digest
进行时触发,有时不触发。这就是为什么我使用这张支票。
如果有人知道,我想知道一种更好的方法。
来自评论:@anddoutoi
angular.js反模式
- 不这样做
if (!$scope.$$phase) $scope.$apply
,这意味着您$scope.$apply
在调用堆栈中不够高。
解决方法
我发现自从以角度构建应用程序以来,我需要越来越多地手动将页面更新到我的范围。
我唯一知道的方法是$apply
从控制器和指令的范围进行调用。问题是它不断向显示以下内容的控制台抛出错误:
错误:$ digest已经在进行中
有谁知道如何避免这种错误或以不同的方式实现相同的目的?
你可能想看: