首页 >web前端 >js教程 >了解Angular的$ applar()和$ digest()

了解Angular的$ applar()和$ digest()

尊渡假赌尊渡假赌尊渡假赌
尊渡假赌尊渡假赌尊渡假赌原创
2025-02-21 11:45:08780浏览

Understanding Angular's $apply() and $digest()

>正在寻找一流的在线AngularJS培训?查看Todd Motto的Ultimate Angular。使用Code SitePoint进行25%的折扣和支持SitePoint!

>

angularjs的$apply()$digest()>函数是基本的,但有时令人困惑的元素。 掌握它们是理解Angularjs内在工作的关键。本文阐明了它们在日常Angularjs开发中的作用和实际应用。

钥匙要点:

对于AngularJS的双向数据绑定,
  • 至关重要,可确保视图和范围模型之间的无缝更新。 $apply()>$digest()>在
  • 级别上启动a
  • 循环,穿越所有子范围并执行观察者。当模型更改发生在其上下文中时,AngularJ会自动调用它。 当模型修改发生在AngularJS的上下文之外时(例如,使用$apply()>或DOM事件侦听器),$digest的手动调用是必要的。这标志着Angularjs以更新观察者并正确传播更改。 $rootScope
  • 循环多次迭代,验证范围模型更改。 它一直持续到未检测到进一步更改或达到最大迭代限制(10)为止。
  • $apply()setTimeout()>深探究
  • >>
  • $digest
  • >
$apply()>每当更改时执行侦听器函数。 关键的问题是: $digest()答案是>循环。 这个周期触发了观察者。 当观察者开火时,AngularJS评估了范围模型。如果检测到更改,相应的侦听器函数将运行。>

循环由
<code class="language-javascript">$scope.$watch('aModel', function(newValue, oldValue) {
  // Update the DOM with newValue
});</code>
>启动。例如,如果您修改范围内的示波器模型,则AngularJS会自动调用

。 这开始了周期,发射所有观察者并相应地更新视图。 其他指令/服务(例如,aModel)也触发循环。但是,AngularJS并未直接调用

。相反,它使用$digest()>,然后又调用$scope.$apply()。这样可以确保$rootScope.$digest()循环从根部开始,并通过儿童范围传播。 当您与函数一起使用$digest时,AngularJS将函数调用包装在ng-click>中。 $scope.$apply()>

有两种形式:一种接受一个函数作为参数(首选),而无词语版本只需启动

cycle。 $apply()$digest手动

调用:

何时需要手动? AngularJS仅考虑>内部的模型更改(即用$apply()>包装的代码)进行的。内置指令会自动处理此操作。 但是,如果您修改了Angularjs上下文之外的模型,则必须手动致电以告知AngularJS更改。

例如,使用

更新范围模型需要手动$apply()> $apply()>没有$apply(),视图将无法更新。 为此,它更喜欢

,因为它会自动处理

setTimeout()>的函数题目版本是最好的,因为它使用$apply()

块来处理异常。
<code class="language-javascript">$scope.$watch('aModel', function(newValue, oldValue) {
  // Update the DOM with newValue
});</code>

$apply()>循环迭代: $timeout $apply()$apply()循环反复运行,检查模型更改。 如果侦听器函数修改模型,则循环重新启动以说明这些更改。这会一直持续到没有更多更改或达到最大迭代数(10)为止。 旨在使掌声的侦听器功能最小化循环迭代。try...catch> $exceptionHandler

结论:

理解$digest>和对于有效的AngularJs开发至关重要。 在对AngularJS上下文之外进行模型更改时,请记住要手动调用

。 尽可能使用

>避免手动$digest>

(为简洁而删除了常见问题部分。所提供的常见问题是重复的,在重写文本的主体中很大程度上覆盖。

以上是了解Angular的$ applar()和$ digest()的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn