RxJを学習しています。想定に基づいて確認または修正を求めています。
サービスクラスのさまざまな場所で.next()
を使用できるサービスでpublic read onlyを監視可能にしようとしています。これがそれを行う適切な方法であるかどうか私は思っています:
_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$
_をサブスクライブできますが、TypeScriptがそれを許可しないため、myObservable$.next()
を呼び出すことはできません(Observableクラスにはnext()
がありません方法)。
これは実際に推奨される方法であり、RxJSは内部的にasObservable
を決して使用しません。詳細については、以下を参照してください。
非常によく似た質問を参照してください: rxjsサブジェクトをクラスで公開する必要がありますか?
この種のオブザーバブルを使用しているプロジェクトでは、プライベートオブザーバブルを適切にカプセル化していますが、パブリックメソッドを使用してnext()
を呼び出すことができます。
private sourceName = new Subject<T>();
name = this.sourceProductName.asObservable();
sendName(item: T) {
this.sourceName.next(item);
}