0
コンポーネントにデータを返してから、サービスからのデータを持つルートをパラメータとして渡そうとしています。私はobservablesを間違って使用していると思うし、データを購読者に返すことができない場合や、サービスプロバイダからのルーティングを開始する必要があるかどうか混乱していると思います。サービスプロバイダからのルートをトリガーする問題は、scopeがextractData内で変更されることです。 extractData()内からthis.routerにアクセスできますか?更新角度で観測可能なデータを返す
:
コンポーネント:
private dataFromServer: ShortFormModel;
onSubmit(shortForm: any) {
if (!shortForm) { return; }
const formModel = this.shortForm.value;
this.shortFormService.create(formModel)
.subscribe(body => { this.dataFromServer = body; console.log(body) })
})
}
サービスプロバイダ:
create(shortForm: any): Observable<ShortFormModel> {
let headers = new Headers({'Content-Type': 'application/json'});
let options = new RequestOptions({headers: headers});
return this.http.post(this.preCheckUrl, shortForm, options)
.map((res) => this.extractData(res))
.catch(
(error: any): Promise<any>=> {
this.router.navigate(['/error', error]);
return Promise.reject(error.message || error);
}
)
}
private extractData(res: Response) {
let body = res.json();
this.router.navigate(['/apply', body.appId])
return body|| { };
}
応答ペイロード:
{
"offer":{
"id":null,
"amount":null,
},
"dupes":true,
"appId":53
}
コンポーネントは、上のフォームを提出し、このように設定されています
完璧な、それは動作します!私の質問の他の部分については、どのように私はコンポーネントにデータを返すだろうか?今、私が応答にアクセスすることができる唯一の方法は、extractDataからです。 ; this.router.navigate([」 '.subscribe(RES => { this.componentProperty = RES:あなたはこのように、サブスクライブ法の成功コールバック内から観察可能な "内" からのデータにアクセスすることができます – Anthony
/apply '、res]) } ' – Karsten
これは意味がありますが、サブスクリプションの' res 'は応答であっても空のオブジェクトに過ぎません。上記の私の更新された実装を見てください。 – Anthony