请考虑我的应用程序的波纹图
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);
}
}
问题是当从基金,客户端或路由器插座内的任何其他组件调用'announce'功能时,父(MainApp)将不会收到任何消息。
另一方面,当我从NavigationMenu调用相同的服务功能时,MainApp接收该事件就好了。 那么如何让路由组件与其父组件进行交互呢?
由于
此案例已经在RC1&amp; RC2
答案 0 :(得分:3)
确保仅在公共父(根组件)上提供EventsHub
一次。 DI为每个提供商维护一个实例。如果您在使用它的每个组件上提供它,则每个组件都会获得不同的实例。因此,一个组件侦听一个实例,另一个组件侦听另一个实例。
答案 1 :(得分:0)
例如,您的Funds
组件可能有一个EventEmitter
@Output() someEvent: EventEmitter<SomeResult> = new EventEmitter<SomeResult>();
然后你的基金可以在我的电话中发出这个事件:
this.someEvent.emit({'Hello', 'from', 'the', 'other','side'});