Angular 2 - 家长和孩子通过服务进行交流

时间:2016-04-10 20:51:27

标签: angular angular2-services

这与食谱示例有关:https://angular.io/docs/ts/latest/cookbook/component-communication.html#!#bidirectional-service

我使用observable创建了一个服务,因此没有直接连接的组件可以进行通信。

当有一个真正的孙子可观察的和一个正在收听的相连时,一切都很顺利。

当我尝试创建孙子而没有正在侦听的时,我的问题就会出现("No provider for service")。

就像在食谱中一样,服务应该只是一个正在监听providers: [MissionService]的组件内的提供者。

1 个答案:

答案 0 :(得分:1)

这是因为你不能通过分层注入器来利用提供者。

使这项工作最简单的方法是在引导应用程序时定义服务的提供者:

bootstrap(AppComponent, [ MissionService ]);

不要忘记从组件的providers属性中删除服务。

当组件链接在一起时,这是有效的,因为组件在其关联的注入器中查找提供程序。如果没有匹配,它会查看其父注入器,依此类推:

Application
     |
AppComponent
     |
ChildComponent
    |
SubChildComponent

如果组件中没有关系和定义提供者,则另一个组件将无法找到它。

有关分层注入器的模式详细信息,您可以查看以下问题: