現在、共有サービス内のメソッドが複数のコンポーネントによって使用されるシナリオがあります。このメソッドは、常に同じ応答を持つエンドポイントに対してHTTP呼び出しを行い、Observableを返します。最初の応答をすべてのサブスクライバーと共有して、HTTP要求の重複を防ぐことはできますか?
以下は、上記のシナリオの簡略版です。
class SharedService {
constructor(private http: HttpClient) {}
getSomeData(): Observable<any> {
return this.http.get<any>('some/endpoint');
}
}
class Component1 {
constructor(private sharedService: SharedService) {
this.sharedService.getSomeData().subscribe(
() => console.log('do something...')
);
}
}
class Component2 {
constructor(private sharedService: SharedService) {
this.sharedService.getSomeData().subscribe(
() => console.log('do something different...')
);
}
}
パーティーには遅れましたが、この使用例に対処するために 具体的には再利用可能なデコレータ を作成しました。ここに掲載されている他のソリューションと比較してどうですか?
when
を構成する方法を提供し、基礎となるオブザーバブルを共有したい(ドキュメントを参照)。これは、さまざまなAngular関連のユーティリティで使用する傘の下で公開されています。
インストールしてください:
npm install @ngspot/rxjs --save-dev
それを使う:
import { Share } from '@ngspot/rxjs/decorators';
class SharedService {
constructor(private http: HttpClient) {}
@Share()
getSomeData(): Observable<any> {
return this.http.get<any>('some/endpoint');
}
}