【问题标题】:How to set HttpParams in a compact way similar to HttpHeaders in Angular [duplicate]如何以类似于 Angular 中的 HttpHeaders 的紧凑方式设置 HttpParams [重复]
【发布时间】:2018-06-04 07:40:44
【问题描述】:

我对 Angular 比较陌生,现在正在从“旧”Http API 升级到新的 HttpClient API。

因此,我必须使用新的 HttpHeaders 和 HttpParams,到目前为止效果很好。但是我能找到的声明示例对我来说似乎有点奇怪,因为它基本上可以归结为这一点。

let searchParams = new HttpParams();
searchParams = searchParams.append('query', query);
searchParams = searchParams.append('sort', sort);
searchParams = searchParams.append('order', order);

const headers = new HttpHeaders({
  'Content-Type': 'application/json',
  'Authorization': 'Bearer ' + user['sessionToken']
});

有没有办法以类似于HttpHeaders的方式声明HttpParams?我使用的方法是我在网上能找到的唯一方法,经过大量尝试和错误之后似乎是唯一可行的方法。

我不是在问如何设置 HttpParams,我想知道为什么 HttpParams 和 HttpHeaders 不能以相同的方式设置(在我的示例中设置 HttpHeaders 的方式,在一行中声明)。

【问题讨论】:

  • 如果你问为什么 Angular 的开发者决定这样做,你必须问他们。对于 SO 来说,这并不是一个真正的问题。请注意,您可以在 options 参数中使用fromObject(请参阅github.com/angular/angular/blob/…),但不能将其直接传递给构造函数 - const params = new HttpParams({ fromObject: { query, sort, order } });

标签: angular angular2-http


【解决方案1】:

Angular@5 中,你可以像这样设置参数,就像这样:

let searchParams = new HttpParams({
    fromObject: {
        query: query,
        sort: sort,
        order: order
    }
});

const modified = req.clone({params: searchParams});

或者您可以直接在请求上使用setParams 方法:

const modified = req.clone({setParams: {'query': query, 'sort': sort, 'order': order}});

如果您对为什么 HttpParamsHttpHeaders 是不可变的感到好奇,请查看此答案 Why do most classes of the HttpClient API define immutable objects?

【讨论】:

  • 感谢您的帮助,这看起来不错,但我不断收到 >Argument of type '{ fromObject: [...] }' is notassignable to parameter of type '{ fromString?: string;编码器?:HttpParameterCodec; }'.
  • @GeneDoe,当然,不客气。您使用的是哪个版本的 Angular?带有fromObject 的选项在 v5 及更高版本中可用。用setParams试试另一个
  • 啊,解释了,我还在 v5 以下。再次感谢。
  • @GeneDoe,不客气,祝你好运!
猜你喜欢
  • 1970-01-01
  • 2013-01-19
  • 1970-01-01
  • 1970-01-01
  • 2014-09-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-19
相关资源
最近更新 更多