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反模式

  1. 不这样做if (!$scope.$$phase) $scope.$apply(),这意味着您$scope.$apply()在调用堆栈中不够高。

解决方法

我发现自从以角度构建应用程序以来,我需要越来越多地手动将页面更新到我的范围。

我唯一知道的方法是$apply()从控制器和指令的范围进行调用。问题是它不断向显示以下内容的控制台抛出错误:

错误:$ digest已经在进行中

有谁知道如何避免这种错误或以不同的方式实现相同的目的?

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...