Взаимодействие направленного компонента Angular2 с родителем
Пожалуйста, рассмотрите диаграмму ниже для моего приложения
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 и RC2
2 ответа
Убедитесь, что вы предоставляете EventsHub
только один раз на общего родителя (корневой компонент). DI поддерживает один экземпляр для каждого провайдера. Если вы предоставляете его каждому компоненту, который его использует, каждый компонент получает свой экземпляр. Таким образом, один компонент прослушивает один экземпляр, а другой - другой.
Например, ваш Funds
Компонент может иметь EventEmitter
@Output() someEvent: EventEmitter<SomeResult> = new EventEmitter<SomeResult>();
Тогда ваши фонды могли бы эмитировать это событие моего призвания:
this.someEvent.emit({'Hello', 'from', 'the', 'other','side'});