我收到错误" ObservableDataService没有提供商"
ObservableDataService
:
https://github.com/sanex3339/bannerscreator/blob/master/resources/assets/typescript/Services/ObservableDataService/ObservableDataService.ts
注入ObservableDataService
的服务:
https://github.com/sanex3339/bannerscreator/blob/master/resources/assets/typescript/Services/UploadedTemplatesService/UploadedTemplatesService.ts
我在'providers'
的{{1}}装饰器的@Component
选项中描述了ObservableDataService。
但是这个错误仍然会发生。 为什么我仍然会收到此错误?
重要!:目前在repo中防止此错误我使用全局注入UploadedTemplatesService
throug ObservableDataService
,但我不需要{{1}作为单身人士。
我需要bootstrap()
作为新的ObservableDataService
注入的单身人士。
答案 0 :(得分:2)
事实上,当您实施服务时,您不需要使用@Component
装饰器来装饰它。使用@Injectable
装饰器就足够了。
我想有点令人不安的是,无法在@Injectable
装饰器上设置提供程序。原因是提供者与组件相关联。从组件执行的所有处理都将使用组件的注入器。
我的意思是如果componentA调用serviceA调用serviceA。 @Injectable
装饰器将尝试解析componentA注入器中的serviceB。
另一个重要的部分是"分层注射器" Angular2的功能。以下是所有这些元素及其与样本的关系的概述:
Application
(application injector)
|
ComponentA --- ServiceA --- ServiceB
(component injector)
在这种应用中,我们有两个注射器:
bootstrap
函数AppComponent
属性配置的providers
注入器。它可以"看"应用程序注入器中定义的元素。这意味着如果在此提供程序中找不到提供程序,它将自动查找此父注入程序。如果在后者中找不到,则找不到"提供商"错误将被抛出。因此,在您的情况下,您可以在组件或更高版本的提供程序中定义ObservableDataService
。确定在bootstrap中定义它是最广泛的......
这个问题可以为您提供有关分层注射器的详细信息 角色工作: