使用本机 JS 后更改检测不起作用

Change detection not working after using native JS

我有一个 Angular 2 应用程序,它使用 mermaidJS 构建一棵树,这是一个 JS(而非 TS)框架。

为了将此树上的点击绑定到 Angular 事件,在我的 ngOnInit() 方法中我创建了 window 函数,如下所示:

window['myFunctionToBeCalledFromTheTree'] = () => { ...}

一切都很好。

出现的问题是,一旦调用了这些函数中的任何一个,Angular 就不再检测到更改。我找到了一个使用变化检测器的快速解决方法,但我每次都必须调用它。

我的问题是,有没有办法将其自动更改检测返回给 Angular?

问题是您的回调 运行 中的代码在 Angular 区域之外。你需要 运行 它在 Angular 区内:

window['myFunctionToBeCalledFromTheTree'] = () => { this.zone.run(() => { ... } }

您不能在此处使用更改检测器,因为在更改检测期间所做的更改不会被下一个更改检测循环选中。