3

我有一个相当大的 angular.js 1.6 应用程序,我想迁移到 Angular,但是使用 ngUpgrade 会导致太多的 $digests 被触发(即每次Zone.onMicrotaskEmpty被触发)。不幸的是,我正在迁移的应用程序在性能方面已经不是太好了,所以每增加一个 $digest 都是一件大事。虽然我可以用 来缓解这种情况ngZone.runOutsideAngular(),但我真正想要的是完全禁用升级模块中 $digests 的自动触发,并在必要时手动触发它们;由于该应用程序由粗粒度组件组成,我将逐一迁移,因此几乎不需要更改 Angular 来触发 angular.js 中的 $digest。

以下是我正在考虑的一些可能的解决方案;他们中的任何一个是否比其他人更“标准”(或风险/错误倾向更小)?

  • 使用本地修改版本的 ngUpgrade 并调用已rootScope.$digest()删除
  • 在 iframe 中托管升级的 Angular 组件并postMessage()用于与应用程序交互
  • 在 Web 组件中托管升级的 Angular 组件(尚未研究在这种情况下通信将如何工作)
  • 从同一个文档中引导 angular.js 和 Angular 应用程序,让它们都在页面上处理自己的指令/组件

更新(8/23):现在我正在尝试选项 1(本地修改升级 js 文件);虽然我通常喜欢避免做这些事情,但这似乎是迄今为止最安全的选择。

4

1 回答 1

1

有两种方法可以引导混合应用程序:

  1. UpgradeModule - 在 Angular 区域中引导 AngularJS (v1) 和 Angular (v6) 框架

  2. DowngradeModule - 在 Angular 区域之外引导 AngularJS,并保持两个变更检测系统分开。

我已经尝试了两种方法。为了避免所有问题$digest和性能,我建议使用DowngradeModule

于 2018-09-08T08:41:49.893 回答