从Angular 2中的observable中提取数据

时间:2016-05-06 10:09:53

标签: javascript angular

我在理解如何正确使用Angular 2中的observable时遇到了一些麻烦。我有以下查询:

let headers = new Headers({ 'Content-Type': 'application/json' });
let options = new RequestOptions({ headers: headers });
return this.http.get('http://localhost:3000/admin/is-admin.json', options)
  .map(res => res)
  .catch(this.handleError);   }

API调用返回一个布尔值true或undefined,但我无法从函数中返回此值。目前它返回一个对象,我希望它直接返回布尔值。当我将地图线更改为:

  .map(res => JSON.parse(res))

如果我将其更改为:

,我会收到JSON解析错误
  .map(res => res.data)

我收到的错误是数据在响应对象上不存在。有人知道我应该怎么做吗?答案可能很基本,但我已经找了很长时间了......

2 个答案:

答案 0 :(得分:0)

我将通过获取响应有效负载的文本值来使用以下内容:

let headers = new Headers({ 'Content-Type': 'application/json' });
let options = new RequestOptions({ headers: headers });
return this.http.get('http://localhost:3000/admin/is-admin.json', options)
  .map(res => { // <-----
    let responsePayload = res.text();
    return (responsePayload != null) ? Boolean(res.text()) : responsePayload;
   }))
  .catch(this.handleError);

您也可以尝试调用json方法:

let headers = new Headers({ 'Content-Type': 'application/json' });
let options = new RequestOptions({ headers: headers });
return this.http.get('http://localhost:3000/admin/is-admin.json', options)
  .map(res => res.json()) // <-----
  .catch(this.handleError);

答案 1 :(得分:0)

您需要订阅可观察的

getData() {
  let headers = new Headers({ 'Content-Type': 'application/json' });
  let options = new RequestOptions({ headers: headers });
  return this.http.get('http://localhost:3000/admin/is-admin.json', options)
    .map(res => res.json)
    .catch(this.handleError);   
}

otherFunc() {
  this.getData().subscribe(val => this.data = val);
}

<div>
  {{data | json}}
</div>

    constructor(){       this.data = getData();     }