2017-02-16 83 views
4

我是Angular2的新手,我只是很想知道,如果我在_showNavBarshowNavBarEmitter上訂閱,兩者的作用相同(請參閱下面的代碼)。有什麼區別嗎?Observable vs asObservable()?

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

回答

5

asObservable使訂閱者無法訪問原始主題。通過這種方式,您可以限制誰只能訂閱,誰也可以發佈價值。

爲了使此生效,您需要製作_showNavBarprivate

+0

謝謝,這是非常有用的,但我懷疑上面的代碼是在一個單獨的類是可注入的。如果我使_showNavBar私有,那麼我將無法從另一個組件(我導入此類的地方)發出值。 – vikas

+0

您可以添加一個方法,如'addEvent(){this._showNavBar.next('someValue'); }'。但是,如果你不需要或不需要,那麼你可能根本不需要'asObservable'。我認爲總是以這種方式使用它是個好習慣。 –