我正在使用 Angular 8 + 。我有一项将文件上传到服务器并显示进度栏的服务。服务方法是
upload(data): Observable<HttpEvent<any>> {
const url = 'endpoint';
return this.http.request(url, data);
}
我在组件中订阅的内容相同
this.myService.upload(data).subscribe(res => {
const id = res.body.id;
const loaded = res.loaded;
}
但这给了错误
Property 'loaded' does not exist on type 'HttpEvent<any>'.
Property 'loaded' does not exist on type 'HttpSentEvent'.
body
的错误也相同。
request
返回一个HttpEvent<any>
的Observable,而HttpEvent是的并集
export declare type HttpEvent<T> = HttpSentEvent | HttpHeaderResponse | HttpResponse<T> | HttpProgressEvent | HttpUserEvent<T>;
为什么会出现错误? HttpProgressEvent
具有loaded
属性。
看来Angular只选择第一个接口HttpSentEvent
。
答案 0 :(得分:0)
使用http观察选项。它将返回完整响应。
upload(data): Observable<HttpEvent<any>> {
const url = 'endpoint';
return this.http.request(url, data, {reportProgress: true, observe: 'events'});
}
在组件中检查事件类型是否为HttpEventType.response,如果是,则访问其中的值
this.myService.upload(data).subscribe(event => {
if (event.type === HttpEventType.UploadProgress) {
// loader
} else if (event.type === HttpEventType.Response) {
const id = event.body.id;
const loaded = event.loaded;
}
}