我有一个班级:
export class Stuff {
id: string;
namd: string;
}
angular < 4.3
我有这个电话:
getStuff(): Observable<Stuff[]> {
return this.http.get('api-url-here/stuff')
.map((data: Response) => {
return data.json()
.map((item: any) => {
return {
id: item.id,
name: item.name
};
});
})
}
使用angular >= 4.3
我将其更改为:
getStuff(): Observable<Stuff[]> {
return this.http.get<Stuff[]>('api-url-here/stuff')
.map((data: any) => {
return data
.map((item: any) => {
return {
id: item.id,
name: item.name
};
});
})
}
我收到了我的api的一些东西,看起来像那样。
[
{"id":1,"name": "name" }
]
从上面的代码示例中我可以看到,我必须map
两次数据以获得我的类型形状(Stuff[]
)。有没有更好的方法使用angular 4.3+
?
答案 0 :(得分:3)
您在新的HttpClientModule
中使用了输入的响应,因此在第一个map
中,您的结果已经被解析。
getStuff(): Observable<Stuff[]> {
return this.http.get<Stuff[]>('api-url-here/stuff');
}
应该有效。然后
SomeStaffService.getStuff().subscribe(staff => console.log(staff));
更新
在这种情况下,您将能够以两种方式处理错误。在您的服务之外
SomeStaffService.getStuff().subscribe(
staff => console.log(staff),
(err: HttpErrorResponse) => {
if (err.error instanceof Error) {
console.log("Client-side error occured.");
} else {
console.log("Server-side error occured.");
}
}
);
或者您可以在您的服务中订阅并在那里发现错误。请参阅documentation