Angular2路由组件与父组件的交互

时间:2016-06-26 08:34:12

标签: angular components interaction injectable

请考虑我的应用程序的波纹图

enter image description here

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

2 个答案:

答案 0 :(得分:3)

确保仅在公共父(根组件)上提供EventsHub一次。 DI为每个提供商维护一个实例。如果您在使用它的每个组件上提供它,则每个组件都会获得不同的实例。因此,一个组件侦听一个实例,另一个组件侦听另一个实例。

答案 1 :(得分:0)

例如,您的Funds组件可能有一个EventEmitter

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

然后你的基金可以在我的电话中发出这个事件:

this.someEvent.emit({'Hello', 'from', 'the', 'other','side'});