簡體   English   中英

Observable vs Subject和asObservable

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM