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