2016-06-26 7 views
5

Пожалуйста, обратите внимание на сильфон схему для моего приложенияAngular2 направляется взаимодействие компонентов с родителем

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); 
    } 
} 

Проблема заключается в том, когда функция «объявить» называется изнутри фондов, Клиентов или любого другого компонента внутри маршрутизатора-родителя родитель (MainApp) не получит никаких сообщений.

С другой стороны, когда я вызываю ту же служебную функцию из NavigationMenu, MainApp получает событие просто отлично. Итак, как предполагается, что маршрутизированные компоненты взаимодействуют со своим родителем?

Благодаря

этот случай был протестирован на RC1 & RC2

+0

Он может взаимодействовать с 'EventEmitters' – AngJobs

ответ

3

Ru убедитесь, что вы предоставили EventsHub только один раз для общего родителя (корневой компонент). DI поддерживает один экземпляр для каждого провайдера. Если вы предоставляете его каждому компоненту, который его использует, каждый компонент получает другой экземпляр. Таким образом, один компонент слушает один экземпляр, а другой - другой.

+0

спасибо. Я вводил EventsHub в дочерний компонент «Провайдеры». Удалив его оттуда, проблема решена. – Hasan

0

Например ваш Funds компонент может иметь EventEmitter

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

Тогда ваши средства могут испускать это событие мое призвание:

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

AFAIK Запрещается использовать EventEmitter в службе. Но я попробовал, и это не сработало. – Hasan

+0

@Output не поддерживается внутри маршрутизируемых компонентов. – Hasan

+0

Итак, значит ли «Фонды» услуга? – AngJobs