Angular JS:$Scope.Apply()

Angular JS : $Scope.Apply()

我想了解更多关于 $scope.apply() 的实时使用情况。 我们可以在控制器中使用 $scope.apply() 多少次?

例如,我有一些事件,如 ng-click() 、 ng-change() 、 ng-blur() 等。所有事件都在同一个控制器中。对于每个事件,我应该使用 $scope.apply() 吗?如果是,我收到错误:

Error: [$rootScope:inprog] [http://errors.angularjs.org/1.2.15/$rootScope/inprog?p0=%24apply][1]
at Error (native)

我在这个论坛上看到,删除附加的 $scope.apply() 将解决问题。

angularjs $scope.$apply() gives this error: Error: [$rootScope:inprog]

我实现了从代码中删除多个 $scope.apply() 的相同解决方案。错误消失了,但我想知道如何以及为什么?

谁能解释一下。

提前致谢。

$scope.apply() 是更新 DOM 的触发器,在大多数情况下(例如来自 DOM 的触发器像 ng-click 触发器的评估是包装在 $scope.apply() 中,因为它被传递给你的控制器。你通常不需要调用 $scope.apply() 因为它已经被处理了,但是如果你遇到一些没有正确更新的问题,你可以使用 $scope.apply() 基本上推动它更新。为了防止在 apply 已经被评估时调用 apply 你可以像这样进行安全检查:

if (!$scope.$$phase)
    $scope.apply();

$$phase 是一个 angular 内部 属性 即 null/undefined 当没有范围应用正在进行时,当 $scope.apply()正在执行。

$scope.apply() 的工作方式是找到最深的子作用域(最里面的作用域)并检查更改、调用监视等,然后它向上爬行直到到达根作用域,就像您可能想象这是一个相当沉重的电话,应该尽可能避免。