を使用することのどちらか - 私たちのプロジェクトでは、我々はまた、いくつかのシナリオのためのスピナ別名「ローダー」の明示的な制御を望んでいました。したがって、SpinnerServiceがすべてのコンポーネントで利用可能な当社のコアmoduleにあります。
@Injectable()
export class SpinnerService {
private spinnerStateSource = new Subject<SpinnerState>();
spinnerState$ = this.spinnerStateSource.asObservable();
private defaultMessage: string = 'Loading...';
show(message?: string) {
let msg = this.defaultMessage as string;
if (message) {
msg = message;
}
this.spinnerStateSource.next({ showing: true, message: msg });
}
hide() {
this.spinnerStateSource.next({ showing: false, message: '' });
}
spin(obs: Observable<any>, message?: string): Observable<any> {
this.show(message);
return obs.finally(() => this.hide());
}
}
class SpinnerState {
showing: boolean;
message: string;
}
メインモジュール内のコンポーネントは、実際のスピナーUI(EDIT:ちょうどギュンターの答え@のように)表示/非表示するサービスに加入、およびその他のコンポーネントを(サービスを介して)表示するようにスピナーを伝えることができます/隠す。
たとえば、コンポーネントが複数のHTTP呼び出しを行う必要があるかどうかという例があります。参照データを取得したら、これらの呼び出しがすべて完了するまでスピナーに表示させます。そこで、我々は待っているアクションでspin
関数を呼び出します。
this.spinnerService.spin(
Observable.forkJoin(
this.refDataService.getRefDataList('statusTypes'),
this.refDataService.getRefDataList('itemTypes')
)
).subscribe(result => {
this.statusTypes = result[0];
this.itemTypes = result[1];
});
ここでは、「SpinnerState」を使用しました。デフォルト値は何ですか?私はこのコードをコピーするとエラーが発生します。また、 'spinnerState $'とは何ですか? – Jitendra
これは、スピナーに渡す情報が入っているタイプです。投稿を編集しました。 –
これはうまくいきますが、私はこのサービスをどこで使うのかインポートする必要があります。共通に設定する方法はありますか?任意のHTTPリクエストが生成されると、自動的に 'spinnerService.spin'メソッドが呼び出されるため、リクエストごとにこのメソッドを呼び出す必要はありません。 – Jitendra