我看到Response.json()方法被大量使用,我自己也在使用它,但要么我缺少某些内容,要么Response类的文档不正确。
示例:
getCurrentTime() {
return this._http.get('http://date.jsontest.com/')
.map((res:Response) => res.json())
}
在https://angular.io/docs/ts/latest/api/http/index/Response-class.html的Angular站点上,我没有看到该方法是Response类的成员。
如果.json 不是是Response类的成员,那么有人可以指出我理解其工作原理的方向。
如果文档有误,请有人这样说。
提前致谢。
答案 0 :(得分:18)
我看到API Reference for Response,您会看到<script>
export default {
data: function () {
return { handle: 'model' }
}
};
</script>
延伸Response
。如果您尝试搜索Body
,则无法找到它,这可能意味着它不公开。如果您查看the source code for Body,就会看到Body
的代码
json
如果您需要解释来源,请告诉我。这对我来说看起来很自我解释。
答案 1 :(得分:10)
实际上,HTTP客户端文档(Process the response object) 表示:
解析为JSON
这不是Angular自己的设计。 Angular HTTP客户端遵循Fetch函数返回的响应对象的Fetch规范。该规范定义了一个
json()
方法,它将响应主体解析为JavaScript对象。
因此,Angular2实现了Fetch Specification,其中包括所提到的Body
mixin的规范,Angular2的Response
类正在扩展,包括.json()
方法。
json()
方法在调用时必须返回使用JSON运行使用体的结果。
正如您在peeskillet的链接中所看到的,Angular2正在实现Body mixin的所有指定方法,formData()
除外。
答案 2 :(得分:1)
我遇到了同样的问题,这就是错误消失的方式: 在新版本的Angular 4+中,您需要从以下位置导入rxjs:
import { map } from 'rxjs/operators';
而不是从导入:
import 'rxjs/add/operator/map';
接下来,将.get()更改为.get(),并且还必须使用管道将角度4+设置为如下所示:
getCurrentTime() {
return this._http.get<any>('http://date.jsontest.com/')
.pipe(map((res:Response) => res.json()));
}
希望有帮助...!