Angular 角形门2个+;rxjs回调发生在Safari的NgZone之外
在将基于Angular2+Polymer1的大型客户端项目从Angular2 beta升级到stable之后,我注意到Angular的Angular 角形门2个+;rxjs回调发生在Safari的NgZone之外,angular,zonejs,Angular,Zonejs,在将基于Angular2+Polymer1的大型客户端项目从Angular2 beta升级到stable之后,我注意到Angular的(eventname)DOM属性在使用Safari时会触发NgZone之外的函数,以及RxJS的回调(subscribe,map) 这是一个问题,因为这意味着我必须使用NgZone.run()将更改模板绑定变量的每个函数包装为仅针对Safari用户(iOS和桌面)的调用,否则Safari用户(+iPhone)必须通过在屏幕上随机单击触发更改检测事件 在Chrome
(eventname)
DOM属性在使用Safari时会触发NgZone之外的函数,以及RxJS的回调(subscribe
,map
)
这是一个问题,因为这意味着我必须使用NgZone.run()
将更改模板绑定变量的每个函数包装为仅针对Safari用户(iOS和桌面)的调用,否则Safari用户(+iPhone)必须通过在屏幕上随机单击触发更改检测事件
在Chrome上,函数在NgZone内调用(通过执行NgZone.isInAngularZone()
进行验证)
是否为Safari提供了更优雅的解决方案(除了使用NgZone.run()
包装所有调用之外)
上传了一个样本来重现这个问题(Angular2+聚合物)。
更新(11/03/2017)
我设法解决了NgZone之外的两个问题之一——(domevents)
,方法是将webcomponentsjs
polyfill加入index.html
,而不是angular cli.json
的脚本:[]
部分。
纯拷贝和粘贴:
然而,Http.post
回调仍然在NgZone
之外调用,尽管我注意到如果我简单地删除webcomponentsjs polyfill,回调将在NgZone内执行
现在这个问题只有在我使用webcomponents
时才会发生,原因是Safari在XMLHttpRequestEventTarget中实现了addEventListener,我已经做了PR来修复它。
您所描述的将是一个巨大的角度问题。我刚刚在Safari上测试了我的一个angular应用程序(v2.4.7),它工作正常。您是否在safari上测试过其他角度应用程序?您是否检查过您是否具有正确的依赖项等?@JBNizet我使用的2.4.7具有正确的依赖项,我认为(npm I
不“抱怨”)。。。我将尝试在ng new…
(angular cli)模板上复制它,然后上载样本。@JBNizet上载的样本。使用我所做的其他实验进行更新。