HttpParams与Angular 6中的Put和Post更改返回类型一起使用为Observable <httpevent <t >>

时间:2018-08-16 20:50:04

标签: angular observable angular6

我有一种情况,我正在做一个帖子,它也给了我一个json对象。

仅在帖子中使用URL和正文时,返回类型为Observable<T>

但是同时使用params时,返回类型变为Observable<HttpEvent<T>>

这是一个简单的例子...

要发布的信息

let someInfo: SomeInfo = new SomeInfo("abc", "xyz");

发布后期望的返回类型是MwUser。

不带参数的常规帖子

this.httpclient.post<MwUser>(apiUrl, someInfo).subscribe(
  res => {
    console.log(res);
  },
  error => {
    console.log(error);
  }
);

res是MwUser

enter image description here

现在使用params做相同的帖子

const paramToPass: any = new HttpParams().set('groupType', 'xyz');
this.httpclient.post<MwUser>(apiUrl, someInfo, paramToPass).subscribe(
  res => {
    user = res;
    console.log(res);
  },
  error => {
    console.log(error);
  }
);

此处res不是MwUser

enter image description here

如何处理第二种情况(上述),将res更改为MwUser并仍然传递参数?

旁注:当我们将参数传递给get时,返回类型为Observable<T>

2 个答案:

答案 0 :(得分:1)

observe : 'body';添加到第三个参数httpOptions(在您的情况下为paramToPass)中,期望返回类型为Observable<T>。您可以查看官方文档以查看http.post

的不同变体
let paramToPass = {};
paramToPass['params'] = new HttpParams().set('groupType', 'xyz');
paramToPass['observe'] = 'body';

this.httpclient.post<MwUser>(apiUrl, someInfo, paramToPass).subscribe(
  res => {
    user = res;
    console.log(res);
  },
  error => {
    console.log(error);
  }
);

答案 1 :(得分:0)

您需要将HttEvent映射到MwUser,这里有一些示例:https://angular.io/guide/http

寻找.pipe(