ngUpgrade是否有任何替代品可以并排运行angularjs和angularjs,或者选择退出ngUpgrade';s$摘要触发器?
我有一个相当大的angular.js 1.6应用程序,我想迁移到angular,但使用ngUpgrade会导致触发太多的$digests(即每次触发ngUpgrade是否有任何替代品可以并排运行angularjs和angularjs,或者选择退出ngUpgrade';s$摘要触发器?,angularjs,angular,web-component,zonejs,ng-upgrade,Angularjs,Angular,Web Component,Zonejs,Ng Upgrade,我有一个相当大的angular.js 1.6应用程序,我想迁移到angular,但使用ngUpgrade会导致触发太多的$digests(即每次触发Zone.onMicrotaskEmpty)。不幸的是,我正在迁移的应用程序在性能方面已经不是太好了,所以每增加一个$digest都是一件大事。虽然我可以通过ngZone.runOutsideAngular()在某种程度上缓解这一问题,但我真正想要的是完全禁用升级模块中$digests的自动触发,并在必要时手动触发它们;由于该应用程序由粗粒度组件组成
Zone.onMicrotaskEmpty
)。不幸的是,我正在迁移的应用程序在性能方面已经不是太好了,所以每增加一个$digest都是一件大事。虽然我可以通过ngZone.runOutsideAngular()
在某种程度上缓解这一问题,但我真正想要的是完全禁用升级模块中$digests的自动触发,并在必要时手动触发它们;由于该应用程序由粗粒度组件组成,我将逐一迁移这些组件,因此不需要对Angular进行任何更改,就可以在Angular.js中触发$digest
以下是我正在考虑的一些可能的解决方案;它们中有哪一个比其他的更“标准”(或者风险更小/更容易出错)
- 使用本地修改的ngUpgrade版本,并调用
已删除rootScope.$digest()
- 在iframe中托管升级的角度组件,并使用
与应用程序交互postMessage()
- 在web组件中承载升级的角度组件(尚未研究在这种情况下如何进行通信)
- 从同一个文档中引导angular.js和angular应用程序,让它们在页面上处理自己的指令/组件
更新(8/23):目前我正在尝试选项1(本地修改升级js文件);虽然我通常喜欢避免这样做,但这似乎是迄今为止最安全的选择。有两种方法可以引导混合应用程序:
我两种方法都试过了。为了避免所有与
$digest
和性能有关的问题,我建议使用降级模块
好奇地想知道这对您是如何起作用的吗?它已经起到了很好的作用;由于我的新Angular组件是非常独立的(例如,我没有Angular组件托管Angular.JS指令托管Angular组件等),因此缺少自动$digest
调用并不是一个问题。如果/当我确实需要这些调用时,我会像处理Angular.js之外的其他更改(例如JQuery等)一样显式地进行调用。而且修改只针对一行(调用rootScope.$digest
),因此非常简单。David,你有没有花时间研究iframes方法(2)?您的AngularJs项目中有哪些模块加载?我有RequireJS,即使同时运行NG-1和NG-5,也会导致太多头痛:(