我在我的角度项目中遇到了一个错误,最终通过将我的代码包装到
this.zone.run(() => {/* my code here */});
如this answer所述。
我之前的理解zone
是,Angular 无法检测到callbacks
第三方库的异步所做的更改,因为“它们不在 Angular 中zone
”。如果我单击 a button
,则触发的事件不是浏览器的本机click
事件,而是由 angular 创建的自定义(修补)click
事件,其handler
在zone
so angular 中运行会知道其回调处理程序所做的更改。
但是我无法理解通过router.navigate()
在第三方回调中运行会产生这个问题(如this github issue所示)。不是Router
angularservice
本身吗?zone
为什么在第三方调用时它不会自动通知 Angular callback
?
我通过router.navigate
在 NGXS 的 state reducer 中使用遇到了这个问题。
我的问题是:
有人能解释一下我什么时候需要把我的代码包装进去NgZone
吗?
调试几个小时并意识到我的代码脱离了zone
上下文是令人厌烦的。