Angular 2服务启动

4

在Angular 2中是否可以在启动时执行服务?bootstrap不会执行服务的构造函数。此外,每当某个组件注入该服务时,注入器都会执行该服务的构造函数。有没有办法使服务成为单例,并确保构造函数仅运行一次?

2个回答

2

将服务仅添加到bootstrap中,而不是在组件的providers中添加。如果您在AppComponent中注入它,它将被实例化且仅一次。

将服务添加到组件的providers中会为每个组件实例创建一个新实例。


谢谢!但是有没有一种方法可以在不将服务注入任何组件的情况下实例化服务?只通过使用引导程序? - Ron Avraham
1
我认为这应该可以在注入或不注入的情况下工作:bootstrap(AppComponent,[provide(MyService,useValue:new MyService())]) - Günter Zöchbauer

1

Bootstrap不会启动服务,注入服务的消费类会启动。将其列在引导程序中,您将获得单例。

如果按照惯例将可注入服务(LogRepository)列入引导程序,则所有服务都将是单例。 (如LogRepository中所示) bootstrap(TheApp,[HTTP_PROVIDERS,LogRepository]);

如果您将它们列为组件提供程序,则可以获取更多可注入服务的实例,但一开始,只需在bootstrap()中列出它们。 然后全部是单例。


在Angular 4中,我应该把bootstrap(App,[..])放在哪里? - fsi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接