我在我的后台应用程序中运行多个小的 angular 5 应用程序作为小部件。现在我正在尝试编写一个全局服务,它处于窗口级别,并在所有应用程序中共享。
目前,我正在使服务静态并在每个小部件中使用,并使用 webpack 创建特定于小部件的捆绑包。在这里,我能够使用 rxjs 运算符实现 http 缓存。
但我觉得这可能不是实现它的正确方法。有没有更好的方法在单个项目中跨多个 Angular 5 应用程序共享单例服务。
以前,如果你想在多个 Angular 项目之间共享一些东西,那是相当棘手的。您必须执行以下操作之一:
但现在我猜测 Angular 6 中引入的库支持最适合您的需求。
有关详细信息,请参阅: Angular - 创建库
将你的共享包发布到 NPM 类似于,但 Angular CLI(和ng-packagr)确实让它变得超级简单。
从技术上讲,您的模块之一(“主”模块)可以通过对象导出自己的服务window
,其他模块(“客户端”)可以注入包装服务:
class ServiceWrapper implements IService
{
private readonly instance:IService;
constructor(){
this.instance = window['myService'] as IService;
}
public someMethod():void {
this.instance.someMethod();
}
}
根据定义,服务是单例的,因此如果您需要在项目中跨多个应用程序使用服务,您真正需要做的就是在项目的根目录中定义它,并将其导入每个 app.module 中。这里有点不正统的是使用多个应用程序的想法。也许您真正需要的是一个应用程序,其中包含您的解决方案所需的尽可能多的模块。但是话又说回来,如果不看你的架构,我不能准确地说出任何话,所以如果你想分享你的代码,也许我可以看看它并提出建议。
干杯!