[英]Observable vs Subject and asObservable
我正在學習RxJs,我正在尋求對我的假設進行確認或更正。
我試圖在服務中創建一個public read only observable,我可以在我的服務類的不同位置使用.next()
。 我想知道這是否是正確的方法:
private myObservable = new Subject<T>();
public myObservable$: Observable<T> = this.myObservable.asObservable();
myObservable$
myObservable.next(...);
它的工作完美,但我有足夠的經驗知道我可能只是一個不知情的白痴(RxJS很大)。 這個用例是正確的模式和正確的對象嗎?
你正在做的是正確的。 然而,仍然有一些較短的符號。 由於Subject已經是一個Observable(它繼承了Observable類),你可以將類型檢查留給TypeScript:
private myObservable = new Subject<T>();
public myObservable$: Observable<T> = this.myObservable;
您的服務的任何消費者都可以訂閱myObservable$
但是無法調用myObservable$.next()
因為TypeScript不允許您這樣做(Observable類沒有任何next()
方法)。
這實際上是推薦的做法,RxJS內部從不使用asObservable
。 有關詳細討論,請參閱:
看到一個非常相似的問題: rxjs科目應該在課堂上公開嗎?
在項目中我們使用這種Observables,這給你適當的封裝到你的私有observable,但你仍然可以使用一些公共方法調用next()
。
private sourceName = new Subject<T>();
name = this.sourceProductName.asObservable();
sendName(item: T) {
this.sourceName.next(item);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.