2016-10-11 2 views
0

Hier ist Service:Angular 2 - Abonnement Thema Immobilien Service Ereignisse nicht fangen

@Injectable() 
export class AuthService { 

    public reset: Subject<any>; 

    constructor() { 
    this.reset = new Subject(); 
    } 

    public logout() { 
    this.reset.next('logout'); 
    } 
} 

Dies ist ein weiterer Service ist die wissen will, wenn logout() geschieht:

@Injectable() 
export class StoreService() { 

    constructor(private auth: AuthService) { 

    this.auth.changes.subscribe((value) => { 
     // Do not work God knows why 
    }); 
    } 
} 

Abonnement in Der zweite Dienst wird nie irgendwelche Ereignisse bekommen. Warum?

+0

Sorry, auth.changes ist nur ein Getter, der die Eigenschaft reset zurückgibt. –

+0

Können Sie auch zeigen, wie Sie 'changes' getter (oder was auch immer) erstellen? – martin

+0

@Martin Ja, natürlich ist es hier: 'public get changes() { zurückgeben this.reset; } ' Diesen habe ich auch versucht: ' public get changes() { Rückgabe this.reset.asObservable(); } ' –

Antwort

0

Sie haben beobachtbare Zeichenfolge zu definieren, die Sie in einem anderen Dienst oder eine Komponente abonnieren:

@Injectable() 
export class AuthService { 

    public reset: Subject<any>; 
    /** 
    * Observable string streams 
    */ 
    notifyObservable$ = this.reset.asObservable(); 


    constructor() { 
    this.reset = new Subject(); 
    } 

    public logout() { 
    this.reset.next('logout'); 
    } 
} 

// StorageService

@Injectable() 
export class StoreService() { 

    constructor(private auth: AuthService) { 

    this.auth.notifyObservable$.subscribe((value) => { 
     // Do not work God knows why 
    }); 
    } 
} 
+0

Vielen Dank für Ihre Antwort, aber Betreff bereits zurück Observable, warum ich anrufen muss asObservable() auf Observable? Wie auch immer, es funktioniert immer noch nicht –

+0

Gibt es einen Fehler, bekommen Sie? – ranakrunal9

+0

können Sie die Antwort http://stackoverflow.com/questions/39738974/can-emit-the-event-from-parent-to-child-in-angular2/39739184#39739184 für Ihre Referenz überprüfen – ranakrunal9

1
@Injectable() 
export class AuthService { 

    public reset: Subject<any>; 
    reset$ = null; 

    constructor() { 
    this.reset = new Subject(); 
    this.reset$ = this.reset.asObservable(); 
    } 

    public logout() { 
    this.reset.next('logout'); 
    } 
} 

und andere Service es auf das Ereignis abonnieren raubend .

@Injectable() 
export class StoreService() { 

    constructor(private auth: AuthService) { 

    this.auth.reset$.subscribe((value) => { 
     console.log(value); 
     //implement your own logic here 
    }); 
    } 
} 
+0

). Das ist genau das, wonach ich gesucht habe. Thx! – Tawani

2

Ich fand das Problem - es gab mehrere Instanzen von AuthService (Danke @Martin). Das Problem ist, wenn jemand eine beliebige Komponente hinzufügt: [AnyService], wird es keine Fehler geben, aber Sie erhalten zwei (oder mehr) Instanzen des Dienstes. Diese Art von Fehler kann leicht gefunden werden, indem Service-Konstruktor console.log(counter++) hinzugefügt wird.

Verwandte Themen