我正在尝试将数据返回到我的组件,然后触发一条路由,其中来自服务的数据作为参数传递。我认为我错误地使用了observable,如果数据可以返回到订阅或者我应该从服务提供者触发路由,我会感到困惑。从服务提供者触发路由的问题是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
}
答案 0 :(得分:2)
使用
时,你确实是对的.map(this.extractData)
范围正在extractData
内变化。您必须在lambda / fat-arrow函数中包含对this.extractData
的调用以保留范围,如下所示:
.map((res) => this.extractData(res))