在多个Angle 5应用程序中共享一项服务

时间:2018-07-27 20:44:40

标签: angular angular5 backbase

我正在将多个小型Angle 5应用程序作为后台应用程序内的小部件运行。现在,我试图编写一个在窗口级别的全局服务,并在所有应用程序之间共享。

当前,我将服务静态化并在每个小部件中使用,并使用webpack创建小部件特定的捆绑包。在这里,我能够使用rxjs运算符实现http缓存。

但是我觉得这可能不是实现它的正确方法。有没有更好的方法可以在单个项目中跨多个angular 5应用程序共享单例服务。

3 个答案:

答案 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项目之间共享某些内容,则非常棘手。您必须执行以下操作之一:

  • 创建一个包含共享代码的程序包,并将其发布到私有或公共NPM注册中心
  • 创建一个GIT子模块,并在两个项目中都引用它

但是现在我猜想Angular 6中引入的 Library 支持将最适合您的需求。

这里有一个简单的介绍文章:

The Angular Library Series - Creating a Library with the Angular CLI

类似于将共享软件包发布到NPM,但是Angular CLI(和 ng-packagr )确实使它变得非常简单。

答案 2 :(得分:2)

按照定义,服务是单例的,因此,如果您需要在项目内的多个应用程序中使用服务,那么您真正需要做的就是在项目的根目录中定义它,并将其导入每个app.module中。 。这里有点不合常规的是使用多个应用程序的想法。也许您真正需要的是一个应用程序,其中包含解决方案所需的模块数量。但是话又说回来,在不看您的体系结构的情况下,我无法说出任何准确的信息,因此,如果您想共享您的代码,也许我可以看看它并提出建议。

干杯!