18

我在我的后台应用程序中运行多个小的 angular 5 应用程序作为小部件。现在我正在尝试编写一个全局服务,它处于窗口级别,并在所有应用程序中共享。

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

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

4

3 回答 3

6

以前,如果你想在多个 Angular 项目之间共享一些东西,那是相当棘手的。您必须执行以下操作之一:

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

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

有关详细信息,请参阅: Angular - 创建库

将你的共享包发布到 NPM 类似于,但 Angular CLI(和ng-packagr)确实让它变得超级简单。

于 2018-08-13T15:58:06.443 回答
4

从技术上讲,您的模块之一(“主”模块)可以通过对象导出自己的服务window,其他模块(“客户端”)可以注入包装服务:

class ServiceWrapper implements IService
{
    private readonly instance:IService;

    constructor(){
        this.instance = window['myService'] as IService;
    }

    public someMethod():void {
         this.instance.someMethod();
    }
}
于 2018-08-13T11:22:56.367 回答
2

根据定义,服务是单例的,因此如果您需要在项目中跨多个应用程序使用服务,您真正需要做的就是在项目的根目录中定义它,并将其导入每个 app.module 中。这里有点不正统的是使用多个应用程序的想法。也许您真正需要的是一个应用程序,其中包含您的解决方案所需的尽可能多的模块。但是话又说回来,如果不看你的架构,我不能准确地说出任何话,所以如果你想分享你的代码,也许我可以看看它并提出建议。

干杯!

于 2018-08-12T20:52:30.700 回答