gpt4 book ai didi

angular - 使用zone.js 0.9.1时,更改检测在Electron应用程序中停止工作

转载 作者:行者123 更新时间:2023-12-03 12:34:24 25 4
gpt4 key购买 nike

我将最近从Angular 6继承过来的Electron应用程序更新为Angular8。使用zone.js 0.9.1(更新:根本原因是该版本的zonejs中的错误-参见下面的自我解答)

遵循升级指南等,使所有内容编译并运行桃红色-直到我开始触发更新模型的操作并注意到 View 没有立即更新。我注意到的行为是,如果我执行诸如单击选项卡或打开对话框或单击按钮之类的操作,则在单击其他操作之前 View 不会更新。

我意识到这是某种变更检测或区域问题,但其他所有东西都正常工作。但是无论出于何种原因,该区域都无法识别模型的变化,因此只有在其他操作(如单击)触发它后, View 才会刷新。

我在Angular之外进行更改后有处理更新 View 的经验,因此我尝试将几个事件处理程序包装在区域promise中,如下所示:
this.zone.run(() => ...do the stuff it was doing before... )
它可以正常工作-重新编译应用程序后,单击按钮并打开对话框后,我立即看到 View 更新,就像在Angular 6中一样。

但是后来我发现我没有自己的处理程序的许多更改也不起作用,例如更改mat-tab-group内部的选项卡和默认对话框按钮。

因此,这变成了一个难题:我可能可以为每个单击选项卡和单击按钮实现自定义事件处理程序,但这似乎是一个巨大而不必要的痛苦,尤其是考虑到我没有对应用程序逻辑本身进行任何更改,只是升级到Angular8。可能是我忘记了一些东西,或者有一个奇怪/特殊的情况,因为它是一个 Electron 应用程序(当我最近使用相同的应用程序将Web应用程序从Angle 6转换为8时,我没有遇到这些问题。过程)。

我很困惑希望社区可以指出我的问题和解决方案-如果所有其他方法都失败了,我想我会写大量的自定义处理程序,并将每行代码都包装在this.zone.run(()=>...)中-谢谢!

最佳答案

因为我已经解决了许多与Angular 2版本跳转有关的问题,所以我忽略了一个控制台错误(“无法读取未定义的属性'eventNames'”),最初我认为这是无关的,但是,注意区域。堆栈中的js。

进行了更多研究,发现这是zone.js版本0.9.1和Electron的已知问题(请参阅https://github.com/angular/angular/issues/31626)

由于并行项目(非Electron)运行良好且在0.9.1上正常运行,因此我之所以仅使用该版本,因此我出于某种原因希望使它们保持同步,但是在更新至0.10.2之后,eventNames错误消失了,并且更改检测正常工作。都是由于某些 stub 函数返回了undefined而不是带有eventNames的对象。

谢谢阅读;更新到最新的工作方式,幸运的是,此问题仅在几周前得到解决。

关于angular - 使用zone.js 0.9.1时,更改检测在Electron应用程序中停止工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58190832/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com