这与食谱示例有关:https://angular.io/docs/ts/latest/cookbook/component-communication.html#!#bidirectional-service
我使用observable创建了一个服务,因此没有直接连接的组件可以进行通信。
当有一个真正的孙子与可观察的和一个正在收听的父相连时,一切都很顺利。
当我尝试创建孙子而没有正在侦听的父时,我的问题就会出现("No provider for service"
)。
就像在食谱中一样,服务应该只是一个正在监听providers: [MissionService]
的组件内的提供者。
答案 0 :(得分:1)
这是因为你不能通过分层注入器来利用提供者。
使这项工作最简单的方法是在引导应用程序时定义服务的提供者:
bootstrap(AppComponent, [ MissionService ]);
不要忘记从组件的providers属性中删除服务。
当组件链接在一起时,这是有效的,因为组件在其关联的注入器中查找提供程序。如果没有匹配,它会查看其父注入器,依此类推:
Application
|
AppComponent
|
ChildComponent
|
SubChildComponent
如果组件中没有关系和定义提供者,则另一个组件将无法找到它。
有关分层注入器的模式详细信息,您可以查看以下问题: