私は現在、オブザーバブルに苦労しています。私はrxjsの主な概念を正しく理解していないと思います。ここに私が達成しようとしていることがあります。角度 - サービスが必要な情報を取得する前にコンポーネントがロードされる
私の角型アプリには/product/:slug
というルートがあり、ProductShowComponent
になります。必要な情報をすべて表示するには、まず、APIからすべての製品を取得する必要があります(ProductsService
)。要は、コンポーネントがロードされた後に商品が取り出される可能性があります(たとえば、ユーザが/product/:slug
のページを更新するとき)。
onReady
メソッドをproductsService
に実装し、ProductShowComponent
に登録して、情報がAPIから取得されたら商品を表示してください。 メソッドがproductsService.ready
値の変更を監視するObservable
を返す場合は、可能性があると思っていましたが、それを行う方法が全くわからないか、まったく考えられません。多分もっと良い方法がありますか?何か案は?
製品-show.component.ts
(...)
public ngOnInit(): void {
this.route.params.subscribe(params => {
this.productsService.onReady().subscribe(() => {
this.product = this.productsService.get(params['productSlug'], 'slug')
})
})
}
(...)
products.service.ts
(...)
constructor(
private appClient: AppClient
) {
this.fetchAll().subscribe((products: Product[]) => {
this.products = products
this.ready = true
})
}
(...)
public onReady(): Observable<any> {
if (!this.ready) {
// return an observable that watches for changes of value of this.ready
} else {
return Observable.of(null)
}
}
(...)
ルートリゾルバーガードの使用を検討しましたか?コンポーネントをロードする前にデータが存在することを保証します。ドキュメント:https://angular.io/guide/router#resolve-pre-fetch-component-data – evenstar