我更新了一个我最近从 Angular 6 继承到 Angular 8 的 Electron 应用程序。使用 zone.js 0.9.1(更新:根本原因是这个版本的 zonejs 中的错误 - 请参阅下面的自我回答)
遵循升级指南等,一切都在编译和运行——直到我开始触发更新模型的操作并注意到视图没有立即更新。我注意到的行为是,如果我执行诸如单击选项卡或打开对话框或单击按钮之类的操作,则在单击其他内容之前视图不会更新。
我意识到这是某种变化检测或区域问题,但其他一切正常。但无论出于何种原因,该区域无法识别模型更改,因此视图不会刷新,直到另一个动作(如单击)触发它。
在 Angular 之外进行更改后,我有一些处理更新视图的经验,因此我尝试在区域承诺中包装几个事件处理程序,如下所示:
this.zone.run(() => ...do the stuff it was doing before... )
它起作用了——在重新编译应用程序后,我现在看到按钮单击和对话框打开时视图立即更新,就像它在 Angular 6 中所做的那样。
但是后来我发现很多我没有自己的处理程序的更改也不起作用,例如更改内部的选项卡mat-tab-group
和默认对话框按钮。
所以这变成了一个兔子洞——我可能会为每个选项卡单击和按钮单击实现自定义事件处理程序,但这似乎是一个巨大且不必要的痛苦,特别是考虑到我没有对应用程序逻辑本身进行任何更改,只是升级到 Angular 8。我可能忘记了一些东西或有一个奇怪/特殊情况,因为它是一个电子应用程序(我最近使用相同的将网络应用程序从 Angular 6 转换为 8 时没有遇到这些问题过程)。
我难住了。希望社区可以指出我的问题和解决方案——如果一切都失败了,我想我会编写大量的自定义处理程序并将每一行代码包装进去this.zone.run(()=>...)
——谢谢!