如何将angular 5服务响应映射到JSON对象

时间:2018-03-12 02:43:24

标签: json angular service mapping

在早期的角度版本中,在我们的服务中,我们可以简单地将响应映射到JSON对象,如下所示:

import { Injectable } from '@angular/core';
import 'rxjs/add/operator/map';
import { HttpClient } from '@angular/common/http';


@Injectable()
export class MakeService {
  constructor(private http:HttpClient) { }
  getMakes(){
    return this.http.get('/api/myAPI')
    .map(res=>res.json());
  }
}

但是,在角度5中我们不再有HTTP了,我们必须使用HttpClient,应该添加到上面的代码中以在angular5中工作。

我的组件如下:

  makes : any[]; 
  constructor(private makeservice: MakeService) { }

  ngOnInit() {
    this.makeservice.getMakes().subscribe(makes=>{
    this.makes=makes;
    console.log("MAKES",this.makes);
    });
  }

只需从make中删除“:any []”数据类型即可,但是我需要将JSON对象从服务传递给组件。

3 个答案:

答案 0 :(得分:3)

尝试以下方法,

getMakes(){
    return this.http.get('/api/myAPI')  
}

并在组件中

constructor(public data:DMakeService ){
    this.data.getMakes().subscribe(data=>{
      console.log(data);
    })
  }

答案 1 :(得分:0)

您不再需要映射到JSON,所以这就足够了:

getMakes(){
  return this.http.get('/api/myAPI');
}

这会返回一个Observable,但不是Promise,因此您必须订阅返回值才能获得结果。如果你想继续使用promises,你可以这样做:

getMakes(){
  return this.http.get('/api/myAPI').toPromise();
}

答案 2 :(得分:0)

根据here。您应该始终订阅httpclient

提出的任何请求
  

始终订阅!

     

在您调用之前,HttpClient方法不会开始其HTTP请求   对该方法返回的observable进行subscribe()。这是真的   对于所有HttpClient方法。

const req = http.get<Heroes>('/api/heroes');
    // 0 requests made - .subscribe() not called.
    req.subscribe();
    // 1 request made.
    req.subscribe();
    // 2 requests made.