在早期的角度版本中,在我们的服务中,我们可以简单地将响应映射到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对象从服务传递给组件。
答案 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.