跨 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
文件中(如果尚未导出的话)。
上下文
我有一个 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
文件中(如果尚未导出的话)。