2017-02-16 1 views
4

Ich bin neu bei Angular2 und ich bin nur neugierig zu wissen, dass, wenn ich ein Abonnement auf _showNavBar oder showNavBarEmitter mache beide funktioniert gleich (siehe unten Code, den ich verwende). Gibt es einen Unterschied?Beobachtbar vs asObservable()?

public _showNavBar: BehaviorSubject<boolean> = new BehaviorSubject<boolean>(null); 
public showNavBarEmitter: Observable<boolean> = this._showNavBar.asObservable(); 

Antwort

5

asObservable macht das ursprüngliche Thema für Abonnenten unzugänglich. Auf diese Weise können Sie einschränken, wer nur abonnieren darf und wer auch Werte ausgeben kann.

Damit dies wirksam wird, müssten Sie jedoch _showNavBarprivate machen.

+0

Danke, das ist sehr nützlich, aber ich habe Zweifel, dass oben genannten Code in einer separaten Klasse, die injizierbar ist. Wenn ich _showNavBar privat mache, kann ich keine Werte von einer anderen Komponente (wo ich diese Klasse importiert habe) ausgeben. – vikas

+0

Sie können eine Methode hinzufügen wie 'addEvent() {this._showNavBar.next ('someValue'); } '. Aber wenn Sie das nicht brauchen oder wollen, dann brauchen Sie wahrscheinlich 'asObservable' überhaupt nicht. Ich denke, es ist eine gute Übung, es immer so zu benutzen. –

Verwandte Themen