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
要么
ChangeDetectorRef
private chRef: ChangeDetectorRef
chRef.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 次 |
最近记录: |