我正在将多个小型Angle 5应用程序作为后台应用程序内的小部件运行。现在,我试图编写一个在窗口级别的全局服务,并在所有应用程序之间共享。
当前,我将服务静态化并在每个小部件中使用,并使用webpack创建小部件特定的捆绑包。在这里,我能够使用rxjs运算符实现http缓存。
但是我觉得这可能不是实现它的正确方法。有没有更好的方法可以在单个项目中跨多个angular 5应用程序共享单例服务。
答案 0 :(得分:4)
从技术上讲,您的模块之一(“主”模块)可以通过window
对象导出自己的服务,其他模块(“客户端”)可以注入包装器服务:
class ServiceWrapper implements IService
{
private readonly instance:IService;
constructor(){
this.instance = window['myService'] as IService;
}
public someMethod():void {
this.instance.someMethod();
}
}
答案 1 :(得分:4)
以前,如果您想在多个Angular项目之间共享某些内容,则非常棘手。您必须执行以下操作之一:
但是现在我猜想Angular 6中引入的 Library 支持将最适合您的需求。
这里有一个简单的介绍文章:
The Angular Library Series - Creating a Library with the Angular CLI
类似于将共享软件包发布到NPM,但是Angular CLI(和 ng-packagr )确实使它变得非常简单。
答案 2 :(得分:2)
按照定义,服务是单例的,因此,如果您需要在项目内的多个应用程序中使用服务,那么您真正需要做的就是在项目的根目录中定义它,并将其导入每个app.module中。 。这里有点不合常规的是使用多个应用程序的想法。也许您真正需要的是一个应用程序,其中包含解决方案所需的模块数量。但是话又说回来,在不看您的体系结构的情况下,我无法说出任何准确的信息,因此,如果您想共享您的代码,也许我可以看看它并提出建议。
干杯!