Angular - 在哪里提供服务?
Angular - where to provide services?
如果我想在一个模块中隔离服务,我应该为模块创建一个根组件,并在该组件上使用providers
(as said docs)。
如果我在模块上使用 providers
,服务 become application level. So, it is way to provide application-level services (as it made in example)。
但是,接下来,docs says:
Do not specify app-wide singleton providers in a shared module. A lazy
loaded module that imports that shared module will make its own copy
of the service.
所以,我们不应该使用providers
的模块来提供共享服务。那么,我们应该使用什么?应用模块providers
?我们应该在 AppModule 中提供所有共享服务吗?我们什么时候应该使用providers
的功能模块?
看起来,模块提供程序是共享的,但您不应该将它们作为共享使用。 WTF?
Do not specify app-wide singleton providers in a shared module. A lazy loaded module that imports that shared module will make its own copy of the service.
这仅适用于延迟加载的模块。 non-lazy 加载模块中的提供程序始终添加到应用程序根范围。
延迟加载的模块有自己的根范围,因为根注入器以后不能修改(在初始化之后)。
要确保在根级别提供所有服务,请实施 forRoot()
方法并在那里提供服务。然后使用 imports: [MyModule.forRoot()]
在 AppModule
处导入服务
是Angularissue, that is still open。
如果我想在一个模块中隔离服务,我应该为模块创建一个根组件,并在该组件上使用providers
(as said docs)。
如果我在模块上使用 providers
,服务 become application level. So, it is way to provide application-level services (as it made in example)。
但是,接下来,docs says:
Do not specify app-wide singleton providers in a shared module. A lazy loaded module that imports that shared module will make its own copy of the service.
所以,我们不应该使用providers
的模块来提供共享服务。那么,我们应该使用什么?应用模块providers
?我们应该在 AppModule 中提供所有共享服务吗?我们什么时候应该使用providers
的功能模块?
看起来,模块提供程序是共享的,但您不应该将它们作为共享使用。 WTF?
Do not specify app-wide singleton providers in a shared module. A lazy loaded module that imports that shared module will make its own copy of the service.
这仅适用于延迟加载的模块。 non-lazy 加载模块中的提供程序始终添加到应用程序根范围。
延迟加载的模块有自己的根范围,因为根注入器以后不能修改(在初始化之后)。
要确保在根级别提供所有服务,请实施 forRoot()
方法并在那里提供服务。然后使用 imports: [MyModule.forRoot()]
AppModule
处导入服务
是Angularissue, that is still open。