Jaa*_*rus 21 javascript angularjs-scope angular
$scope.$apply 将不再是Angular 2的一部分.那么,如果在常规角度执行上下文之外更改了任何绑定属性,我们如何让Angular知道更新DOM?
没有更多$ scope.$ apply
但是AngularJS怎么知道它的执行环境之外的任何东西都取而代之?让我们思考一下变化的来源:
- 的setTimeout
- 的setInterval
- 提示(是的,有人还在使用它......)
- XMLHttpRequest的
的WebSockets
...
答案是:

我知道修补浏览器内置的javascript函数以通知Angular的任何更改都可以以相对安全的方式完成(不会引入细微的错误)并且对开发人员来说非常方便.但是第三方API(例如jQuery.fadeIn)或浏览器是否公开了一些未涵盖的新异步API呢?什么是旧的替代品$scope.$apply?
Hel*_*ate 25
NgZone从核心导入private zone: NgZone 在你的构造函数中this.zone.run(() => {}); 你通常会在哪里 scope.$apply要么
ChangeDetectorRefprivate chRef: ChangeDetectorRefchRef.detectChanges();Bla*_*ise 15
所以,做这一切的猴子补丁库是zone.js.
jQuery.fadeIn电话setInterval,setInterval猴子修补,只要你jQuery.fadeIn在一个内部打电话zone.run.
zone.fork和zone.run替换$scope.$apply,但它是不同的,因为它在异步事件完成时检测到自己,而你必须在知道事情完成后$scope.$apply 手动调用.另请参阅此问题+答案:使用zone.js从任何地方检测当前执行上下文?
如果浏览器公开了一些未涵盖的新异步API?
我猜他们也会补丁.
如果其他一切都失败了,你仍然可以zone.afterTask()手动调用.
我猜这就是你要找的:)
| 归档时间: |
|
| 查看次数: |
11182 次 |
| 最近记录: |