返回数据以从角度

时间:2017-07-19 19:11:04

标签: angular rxjs

我正在尝试将数据返回到我的组件,然后触发一条路由,其中​​来自服务的数据作为参数传递。我认为我错误地使用了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
}

1 个答案:

答案 0 :(得分:2)

使用

时,你确实是对的
.map(this.extractData)

范围正在extractData内变化。您必须在lambda / fat-arrow函数中包含对this.extractData的调用以保留范围,如下所示:

.map((res) => this.extractData(res))