2016-06-26 88 views
5

perche lo schema muggito per la mia applicazioneAngular2 instradato l'interazione dei componenti con i genitori

enter image description here

EventsHub è un semplice servizio iniettabile:

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

Il problema è quando si chiama la funzione 'annunciare' dall'interno di fondi, clienti o qualsiasi altro componente all'interno del router-outlet, il genitore (MainApp) non riceverà alcun messaggio.

D'altra parte, quando chiamo la stessa funzione di servizio da NavigationMenu, MainApp riceve l'evento bene. Quindi come si suppone che i componenti indirizzati interagiscano con i loro genitori?

Grazie

questo caso è stato testato su RC1 & RC2

+0

Può interagire con 'EventEmitters' – AngJobs

risposta

3

It assicurati di fornire EventsHub solo una volta su un genitore comune (componente root). DI mantiene una singola istanza per ogni provider. Se lo fornite a ogni componente che lo utilizza, ogni componente riceve un'istanza diversa. Quindi un componente ascolta un'istanza e l'altro emette su un'altra.

+0

Grazie mille. Stavo iniettando EventsHub nel componente figlio "Provider". Una volta rimosso da lì, il problema è stato risolto. – Hasan

0

Ad esempio il componente Funds potrebbe avere un EventEmitter

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

Allora i vostri fondi potrebbe emettere questo evento la mia vocazione:

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

AFAIK Non è consentito utilizzare EventEmitter all'interno del servizio. Eppure l'ho provato e non ha funzionato. – Hasan

+0

@Output non è supportato nei componenti indirizzati. – Hasan

+0

Allora, il "Fondo" è un servizio? – AngJobs