gpt4 book ai didi

javascript - 为什么 angularjs $scope.$digest() 更新父作用域?

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:15:47 27 4
gpt4 key购买 nike

我对使用 $scope.$digest() 方法感到很困惑。据我所知,当我们调用 $scope.$digest() 时,它不会更新父范围值,所以

its processes all of the watchers of the current scope and its children

,但是当我调用 $scope.$digest() 时,它还会更新父作用域,在本例中为 $rootScope

在下面的例子中,我有一个演示。在 $rootScope 中,我有一个名为 value_on_root 的变量,所以每次我在输入上调用 onchange 事件时,我都会调用一个 Angular 函数并在其中我更改了 $scope 上的变量 file_src 的值,还更改了 value_on_root 上的变量的值 $rootScope,所以当我调用 $scope.$digest 时,它的更新也会调用 $rootScope 上的观察者。

检查这里的例子

Click to see example in CODEPEN

最佳答案

Per This Article :

“$digest 循环是调用 $scope.$digest() 的结果。假设您通过 ng-click 指令更改处理函数中的范围模型。在这种情况下,AngularJS 会自动触发 $通过调用 $digest() 进行摘要循环。当 $digest 循环开始时,它会触发每个观察者。这些观察者检查范围模型的当前值是否与上次计算的值不同。如果是,则执行相应的监听器函数. 因此,如果您在 View 中有任何表达式,它们将被更新。除了 ng-click 之外,还有其他几个内置指令/服务可以让您更改模型(例如 ng-model、$timeout 等)并自动触发 $digest 循环。

到目前为止,还不错!但是,有一个小陷阱。在上述情况下,Angular 不会直接调用 $digest()。相反,它调用 $scope.$apply(),后者又调用 $rootScope.$digest()。因此,摘要循环从 $rootScope 开始,随后访问所有子作用域,沿途调用观察者。

然后更新 rootscope 变量,您会在代码笔中看到更改。

关于javascript - 为什么 angularjs $scope.$digest() 更新父作用域?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31573730/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com