2016-06-26 7 views
5

Bitte geben Sie das unten Diagramm für meine Anwendung betrachtenAngular2 geroutet Komponente Interaktion mit Mutter

enter image description here

EventsHub ist ein einfacher injizierbare Service:

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

Das Problem ist, wenn ‚ankündigt‘ Funktion aufgerufen wird Innerhalb von Funds, Clients oder einer anderen Komponente innerhalb des Router-Outlet erhält der Parent (MainApp) keine Nachrichten.

Auf der anderen Seite, wenn ich die gleiche Service-Funktion von NavigationMenu aufrufen, erhält MainApp das Ereignis gut. Also wie soll es für geroutete Komponenten mit ihren Eltern interagieren?

Dank

dieser Fall auf RC1 & RC2

+0

Es kann mit 'EventEmitters' interagieren – AngJobs

Antwort

3

En Sicher stellen Sie EventsHub nur einmal auf einem gemeinsamen Elternteil (Root-Komponente). DI verwaltet eine einzelne Instanz für jeden Anbieter. Wenn Sie es bei jeder Komponente angeben, die es verwendet, erhält jede Komponente eine andere Instanz. So hört eine Komponente auf eine Instanz und die andere auf eine andere.

+0

Vielen Dank. Ich habe EventsHub in die Child-Komponente 'Providers' injiziert. Sobald es von dort entfernt wurde, löste sich das Problem. – Hasan

0

Zum Beispiel getestet Ihre Funds Komponente eine EventEmitter

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

Dann könnte Ihr Fonds emittieren diese Veranstaltung meine Berufung haben könnte:

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

AFAIK Es ist nicht erlaubt, EventEmitter innerhalb des Dienstes zu verwenden. Aber ich habe es versucht und es hat nicht funktioniert. – Hasan

+0

@Output wird in gerouteten Komponenten nicht unterstützt. – Hasan

+0

Ist also der 'Fonds' ein Dienst? – AngJobs

Verwandte Themen