Angular2路由组件与父级的交互 请参阅我的申请波纹管图。

Angular2路由组件与父级的交互 请参阅我的申请波纹管图。,angular,components,interaction,injectable,Angular,Components,Interaction,Injectable,EventsHub是一个简单的可注入服务: import {Injectable} from '@angular/core'; import {Subject} from 'rxjs/Subject'; @Injectable() export class EventsHub { private announcementSource = new Subject<string>(); messageAnnounced$ = this.announcementSo

EventsHub是一个简单的可注入服务:

import {Injectable} from '@angular/core';
import {Subject}    from 'rxjs/Subject';

@Injectable()
export class EventsHub {
    private announcementSource = new Subject<string>();
    messageAnnounced$ = this.announcementSource.asObservable();

    announce( message : string)  {
        console.log('eventHub : firing...'+message);
        this.announcementSource.next(message);
   }
} 
从'@angular/core'导入{Injectable};
从'rxjs/Subject'导入{Subject};
@可注射()
导出类EventsHub{
private announcementSource=新主题();
messageAnnounced$=this.announcementSource.asObservable();
宣布(消息:string){
log('eventHub:firing…'+消息);
this.announcementSource.next(消息);
}
} 
问题是,当从基金、客户端或路由器出口内的任何其他组件调用“公告”功能时,父级(MainApp)将不会收到任何消息

另一方面,当我从NavigationMenu调用相同的服务函数时,MainApp接收到的事件很好。 那么,路由组件如何与其父组件交互呢

谢谢


此案例已在RC1和RC2上进行了测试,例如,您的
基金
组件可能有一个EventEmitter

@Output() someEvent: EventEmitter<SomeResult> = new EventEmitter<SomeResult>();

确保仅在公共父级(根组件)上提供一次
EventsHub
。DI为每个提供者维护一个实例。如果在每个使用它的组件上提供它,那么每个组件都会得到不同的实例。因此,一个组件监听一个实例,另一个在另一个实例上发射。

它可以与
EventEmitters
AFAIK进行交互,但不允许在服务中使用EventEmitter。但是我试过了,但没有成功。@路由组件内不支持输出。
Funds
a服务也是如此吗?Funds是一个组件,它使用EventsHub服务与其父级进行通信。非常感谢。我正在子组件“提供者”中注入EventsHub。一旦把它从那个里移走,问题就解决了。
this.someEvent.emit({'Hello', 'from', 'the', 'other','side'});