angular $apply()以及$digest()讲解1
2016-04-24 12:23
363 查看
一些知名的批评和缺陷。他们都涉及到$digest loop(更新周期)中一个很常见的问题:如何在Angular之外更新$scope?
也就是说,只能在$controller之外调用$apply,这样它就可以访问到HTML或其他controller控制器的声明代码 - 比如apply调用link指令并触发相应功能,这时侯是肯定在$digest loop之外的。
如果你的代码是不是包裹在函数中传递给$apply,它抛出了一个错误,该错误在AngularJS之外抛出,这意味着在你的应用中的错误处理机制无法处理它。$apply不仅仅执行你的代码,它内部的try / catch语句让你的错误总是能被捕捉到,并且$digist是最后的保障,它意为着即使一个错误抛出,它仍能运行。这是相当不错的。
因此,我们应该将表述改为在Angular之外且在$apply之内更新$scope。
在哪调用 $apply?
更佳的做法是确保你是在$digest loop之外时调用$apply,比如在"link"指令(directive)响应函数内部使用。也就是说,只能在$controller之外调用$apply,这样它就可以访问到HTML或其他controller控制器的声明代码 - 比如apply调用link指令并触发相应功能,这时侯是肯定在$digest loop之外的。
如何处理AngularJS之外抛出的错误?
$scope.$apply()接收一个函数或Angular表达式字符串,并执行它,然后调用 $scope.$digest()来更新所有绑定或侦听者。如果你的代码是不是包裹在函数中传递给$apply,它抛出了一个错误,该错误在AngularJS之外抛出,这意味着在你的应用中的错误处理机制无法处理它。$apply不仅仅执行你的代码,它内部的try / catch语句让你的错误总是能被捕捉到,并且$digist是最后的保障,它意为着即使一个错误抛出,它仍能运行。这是相当不错的。
因此,我们应该将表述改为在Angular之外且在$apply之内更新$scope。
总结
希望您现在了解应该何时以及如何使用$apply()。如果你只需要AngularJS为您提供的功能,那您用到它的概率并不高。但是,如果你写自定义指令,并且直接操纵DOM元素,理解它是很有必要的。相关文章推荐
- 简评搜狗输入法(ios端)
- iOS学习笔记42-Swift(二)函数和闭包
- objective-C把16进制的颜色转换成RGB,包括透明度哦~
- ios 之dealloc
- iOS-setNeedsLayout等布局方法
- Android 异步消息处理机制 Looper、Handler、Message三者关系总结
- iOS学习笔记42-Swift(二)函数和闭包
- Javascript中bind、call、apply函数用法
- Android 学习资料
- android利用socket与java后台交互的设计与实现
- IOS设计模式之迭代器模式
- IOS 开发23种设计模式
- Android学习资料收集
- 笔记:Android判断版本并根据版本使用不同的代码以及旧版本XML问题
- iOS - 类扩展与分类的区别
- Unity3D 中 Generic 动画导入设置和 Root Motion 之间的关系
- Android中简单的电话管理与短信管理App编写实例
- iOS9适配(包括APNs)的改变
- Netty in Action (十八) 第八章节 Bootstrapping
- android相关使用工具