2016-11-15 1 views
1

Ich möchte eine Methode getSelectedUser erstellen, die nur dann ein Observable zurückgibt, wenn ein privates Feld da ist (nicht undefiniert).RxJs return Observable wenn Variable nicht undefiniert

private user : User 

init() { 
    // user = loadingUser... 
} 

getSelectedUser(): Observable<User> { 
    // return ??? 
} 

Das Ziel ist, dass andere Komponenten dieses beobachtbaren abonnieren können und den Benutzer erhalten, sobald es geladen wird.

Hat jemand eine Idee, wie ich das erreichen kann?

Antwort

1

Dann Benutzer definieren eine beobachtbare sein:

private user: Subject<User> = new ReplaySubject<User>(1); // ensure that new registered component gets the last loaded user. 

getSelectedUser(): Observable<User> { 
    return user.asObservable(); 
} 

dann den Benutzer aktualisieren, wenn es fertig ist:

private someUserLoadingFunction(){ 
    ... retrieve user logic -> currentUser... 
    this.user.next(currentUser); 
} 
+0

Vielen Dank für die schnelle Antwort. Es scheint zu funktionieren. Aber jetzt sollte meine Komponente warten, dass der Wert vor dem Rendern vorhanden ist. Weißt du wie ich das machen kann? –

+0

Ich vermisse Informationen, aber Sie können es sichtbar machen mit '* ngIf =" user | async "' – Meir

+0

Danke. Es hat funktioniert. –

Verwandte Themen