一尘不染

AngularJS:调用$ scope。$ apply()时防止错误$ digest已经在进行中

angularjs

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

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

错误:$ digest已经在进行中

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


阅读 293

收藏
2020-07-04

共1个答案

一尘不染

不要使用此模式 -最终将导致更多错误,无法解决。即使您认为它可以修复某些问题,也没有。

您可以$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()在调用堆栈中不够高。
2020-07-04