【发布时间】:2017-02-11 17:40:38
【问题描述】:
我想在一页上运行多个 angular2 应用程序。此外,它们应该在不同的版本中运行。
我知道:Angular 被设计为单页应用程序框架,因此我描述的用例非常奇特。不过我想知道理论上是否可行?
我已经设法让它运行,我唯一的问题是,zone-js 在全局命名空间中有一个变量,并且在多次加载时会引发错误。当我只加载一次 zone-js 时,两个 Angular 应用程序并排运行。您可以在 dom 中看到不同的角度版本。
但现在我的问题更详细了:在一个页面上并排运行两个 Angular 应用程序时,我是否需要担心?只加载一次其他依赖项有意义吗?当 Angular 主要版本 4 可能依赖于另一个 zone-js 主要版本时怎么办 - 我无法将它们都加载到一个页面上?是否可以两次加载所有 webpack 包(inline.bundle.js、vendor.bundle.js、main.bundle.js)?
【问题讨论】:
-
您当然可以通过 hack 或变通方法找到方法来完成这项工作,但您的解决方案可能非常脆弱。无论如何,这样做没有任何意义。您可能会遇到问题,在其中一个应用程序中更新某些内容会导致另一个应用程序发生意外情况。如果这是同一个项目,您为什么不花时间整合多个部分?如果你只是想重用一些组件,那么有办法设计可重用的组件....
-
理想的情况是:平台上的不同应用程序彼此隔离,因此无论其他应用程序的依赖关系如何都可以运行,但这就是我问的原因:确实有角度其他“全局”除了 zone-js 之外会相互干扰的依赖项?如果不是,您将不会遇到“在其中一个应用程序中更新某些内容会导致另一个应用程序发生意外情况”的问题..目标是,您可以开发具有新角度版本的新应用程序,并且不一定有立即将其他(已完成的)应用程序迁移到较新的 Angular 版本
-
我认为这两个版本的路由器部分都会遇到一些困难。两个应用程序都会更改并读取浏览器 URL。我不认为那会很漂亮。
-
根据您提出的问题和 cmet,您似乎对什么是“应用程序”有一个不同寻常的想法......以及您所说的“平台”到底是什么意思? angular 是一个浏览器框架,实际上不可能让一个以上的 JavaScript 脚本与另一个脚本“隔离”,从你试图建议的意义上说......
-
是的,就您在此处描述的内容而言,Angular 对 DOM、浏览器历史记录、网络服务等内容有许多“全局”依赖。 @DavidWalschots 提供了许多示例之一,这将使一个浏览器页面上的两个应用程序非常具有挑战性。
标签: javascript angular typescript