【发布时间】:2014-05-29 01:06:40
【问题描述】:
我试图更好地理解在 Angular 中使用 $timeout 服务作为一种“安全 $apply”方法的细微差别。基本上在一段代码可以运行以响应 Angular 事件或非 Angular 事件(如 jQuery 或某些标准 DOM 事件)的情况下。
据我了解:
- 在 $scope.$apply 中包装代码适用于您 尚未在摘要循环中(也称为 jQuery 事件),但如果摘要正在进行中,则会引发错误
- 在没有延迟参数的 $timeout() 调用中包装代码无论是否已经在摘要周期中都有效
查看 Angular 源代码,看起来 $timeout 调用了 $rootScope.$apply()。
- 如果摘要周期已经在进行中,为什么 $timeout() 不会引发错误?
- 当您确定摘要不会正在进行时,使用 $scope.$apply() 是最佳做法,而在需要以任何方式保证安全时使用 $timeout() 是最佳做法吗?
- $timeout() 真的是一个可以接受的“安全应用”吗?还是有陷阱?
感谢您的任何见解。
【问题讨论】: