AngularJS和$scope.$apply()用法的最佳实践


发布者 ourjs  发布时间 1426423816991
关键字 JS学习  JavaScript 

在哪并何时调用AngularJS中的$scope.$apply()方法?


上周末,我玩了一下Angular,看了一些知名的批评和缺陷。他们都涉及到$digest loop(更新周期)中一个很常见的问题:如何在Angular之外更新$scope?

在哪调用 $apply?


 更佳的做法是确保你是在$digest loop之外时调用$apply,比如在"link"指令(directive)响应函数内部使用。也就是说,只能在$controller之外调用$apply,这样它就可以访问到HTML或其他控制器的声明代码 - 比如apply调用link指令并触发相应功能,这时侯是肯定在$digest loop之外的。


如何处理AngularJS之外抛出的错误?


$scope.$apply()接收一个函数或Angular表达式字符串,并执行它,然后调用 $scope.$digest()来更新所有绑定或侦听者。

如果你的代码是不是包裹在函数中传递给$apply,它抛出了一个错误,该错误在AngularJS之外抛出,这意味着在你的应用中的错误处理机制无法处理它。$apply不仅仅执行你的代码,它内部的try / catch语句让你的错误总是能被捕捉到,并且$digist是最后的保障,它意为着即使一个错误抛出,它仍能运行。这是相当不错的。

因此,我们应该将表述改为在Angular之外且在$apply之内更新$scope。

总结


希望您现在了解应该何时以及如何使用$apply()。如果你只需要AngularJS为您提供的功能,那您用到它的概率并不高。但是,如果你写自定义指令,并且直接操纵DOM元素,理解它是很有必要的。




相关文章

将BootstrapJS和AngularJS结合使用以及为什么不用jQuery
AngularJS在大型单页面应用中的性能优化(






回复 (5)
  • #
  • #1 2b 1426475333933

    .......

  • #2 高七月 1426680257522

    好像什么都没说

  • #3 林甩土 1427168409239

    这个……

  • #4 唐必曲 1457922079978

    没乱用

  • #5 郎旦刘 1458786074976

    不是好像!给我的感觉就是什么都没说 !

微信扫码 立即评论