コンポーネントのレンダリングを開始する前に、サーバから非同期データをフェッチしたいとします。私はルートリゾルバを使用しようとしましたが、それがどのように役立つかはわかりません。リゾルバを使用してコンポーネントレンダリング前の非同期データを取得する
私が使用してActivatedRouteを経由してコンポーネントにリゾルバデータにアクセスすることができます。
ngOnInit() {
this.route.data.subscribe((data : Data) => {
this.caseDataManager.setCase(data['casedata']);
});
コンポーネントを完了GET「購読」の中に初期化し、非同期コードの前にレンダリングされ得ます。
これを行う正しい方法は何ですか?
UPDATE:私のリゾルバコード:
import { Injectable } from '@angular/core'
import { Resolve, ActivatedRouteSnapshot, RouterStateSnapshot } from '@angular/router'
import { Observable } from 'rxjs/Observable'
import { Server } from '../shared/server.service'
@Injectable()
export class WorkspaceResolver implements Resolve<any> {
constructor(private server : Server) {}
resolve(route : ActivatedRouteSnapshot, state : RouterStateSnapshot) : Observable<any> {
return this.server.loadCase(route.params['caseid']); #loadCase is basically "return this.http.get(API_URL+'/case/'+caseid).map(resp => resp.json()"
}
}
私の理解では、解決ガードのObservableが完了するまで、コンポーネントはレンダリングされません。解決コードを投稿できますか? – LLai
@LLaiは正しいです。コンポーネントをレンダリングする前にデータをロードする場合には、解決が使用されます。 –
@LLai、ActivatedRouteのthis.route.dataは観測可能です。だから私はngOnInitでそれを購読する必要があります。したがって、私が理解したように、すでにレンダリングされている「購読」の下にあるコードに到達するまでには。 – amit