Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ngUpgrade是否有任何替代品可以并排运行angularjs和angularjs,或者选择退出ngUpgrade';s$摘要触发器?_Angularjs_Angular_Web Component_Zonejs_Ng Upgrade - Fatal编程技术网

ngUpgrade是否有任何替代品可以并排运行angularjs和angularjs,或者选择退出ngUpgrade';s$摘要触发器?

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的自动触发,并在必要时手动触发它们;由于该应用程序由粗粒度组件组成

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

以下是我正在考虑的一些可能的解决方案;它们中有哪一个比其他的更“标准”(或者风险更小/更容易出错)

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

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

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

  • -在角度区域中引导AngularJS(v1)和AngularJS(v6)框架

  • -将AngularJS引导到角度区域之外,并将两个变化检测系统分开


  • 我两种方法都试过了。为了避免所有与
    $digest
    和性能有关的问题,我建议使用
    降级模块

    好奇地想知道这对您是如何起作用的吗?它已经起到了很好的作用;由于我的新Angular组件是非常独立的(例如,我没有Angular组件托管Angular.JS指令托管Angular组件等),因此缺少自动
    $digest
    调用并不是一个问题。如果/当我确实需要这些调用时,我会像处理Angular.js之外的其他更改(例如JQuery等)一样显式地进行调用。而且修改只针对一行(调用
    rootScope.$digest
    ),因此非常简单。David,你有没有花时间研究iframes方法(2)?您的AngularJs项目中有哪些模块加载?我有RequireJS,即使同时运行NG-1和NG-5,也会导致太多头痛:(