跨 AppModule 和库的单例服务

Singleton service across AppModule and library

上下文

我有一个 angular 应用程序,其中包含两个库:DashboardLib 和 ChartsLib。在我的应用程序的一个组件上,我有一个来自 DashboardLib 的仪表板,而仪表板本身使用来自 ChartsLib 的图表。 我需要定义一个全局计时器来同步我的图表。因此,我在 ChartsLib 中创建了一个服务 TimerService 来处理我的主题的 setInterval 以同步图表。

图表正在监听定时器服务,根应用程序正在启动定时器。

问题

我尝试使用 providedIn: 'root'(甚至 providedIn: 'platform')和 forRoot() 注入我的服务,但我仍然无法在根应用程序和库本身之间共享服务.

我想我不明白共享服务是如何工作的,但是我不知道如何解决我的问题。

感谢您的回复。

providedIn: 'root' 是正确的,但是您还需要在您的库中包含一个 @NgModule 声明(如果您还没有)并将该服务作为提供者包含在内。然后根应用程序需要在其导入中包含该模块。

图书馆

@NgModule({
  declarations: [
   ...
  ],
  imports: [
    ...
  ],
  providers: [
    TimerService
  ],
  exports: [
    ...
  ]
})  
export class LibModule {}

根应用程序

@NgModule({
  declarations: [
    ...
  ],
  imports: [
    LibModule 
  ], 
})
export class AppModule { }

TimerService 也应该作为导出内容包含在库中的 public-api.ts 文件中(如果尚未导出的话)。