没有ObservableDataService的提供者

时间:2016-02-18 14:52:09

标签: angular

我收到错误" ObservableDataService没有提供商"

ObservableDataServicehttps://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注入的单身人士。

1 个答案:

答案 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中定义它是最广泛的......

这个问题可以为您提供有关分层注射器的详细信息 角色工作:

相关问题