gpt4 book ai didi

Angular 4 HttpClient 查询参数

转载 作者:太空狗 更新时间:2023-10-29 16:45:03 29 4
gpt4 key购买 nike

我一直在寻找一种方法来使用新的 HttpClientModuleHttpClient 将查询参数传递到 API 调用中,但尚未找到解决方案。使用旧的 Http 模块,你会写这样的东西。

getNamespaceLogs(logNamespace) {

// Setup log namespace query parameter
let params = new URLSearchParams();
params.set('logNamespace', logNamespace);

this._Http.get(`${API_URL}/api/v1/data/logs`, { search: params })
}

这将导致对以下 URL 的 API 调用:

localhost:3001/api/v1/data/logs?logNamespace=somelogsnamespace

但是,新的 HttpClient get() 方法没有 search 属性,所以我想知道在哪里传递查询参数?

最佳答案

我最终通过 get() 函数上的 IntelliSense 找到了它。因此,我会将它发布在这里,以供任何正在寻找类似信息的人使用。

无论如何,语法几乎相同,但略有不同。参数需要初始化为 HttpParams() 而不是使用 URLSearchParams() 并且 get() 函数中的属性现在称为 params 而不是 search

import { HttpClient, HttpParams } from '@angular/common/http';
getLogs(logNamespace): Observable<any> {

// Setup log namespace query parameter
let params = new HttpParams().set('logNamespace', logNamespace);

return this._HttpClient.get(`${API_URL}/api/v1/data/logs`, { params: params })
}

我实际上更喜欢这种语法,因为它与参数无关。我还重构了代码,使其稍微更缩写。

getLogs(logNamespace): Observable<any> {

return this._HttpClient.get(`${API_URL}/api/v1/data/logs`, {
params: new HttpParams().set('logNamespace', logNamespace)
})
}

多个参数

到目前为止,我发现的最佳方法是定义一个 Params 对象,其中包含我想要定义的所有参数。正如@estus 在下面的评论中指出的那样,This Question 中有很多很好的答案。关于如何分配多个参数。

getLogs(parameters) {

// Initialize Params Object
let params = new HttpParams();

// Begin assigning parameters
params = params.append('firstParameter', parameters.valueOne);
params = params.append('secondParameter', parameters.valueTwo);

// Make the API call using the new parameters.
return this._HttpClient.get(`${API_URL}/api/v1/data/logs`, { params: params })

带条件逻辑的多个参数

我经常对多个参数做的另一件事是允许使用多个参数,而不需要它们出现在每个调用中。使用 Lodash,有条件地从对 API 的调用中添加/删除参数非常简单。 Lodash 或 Underscores 或 vanilla JS 中使用的确切函数可能因您的应用程序而异,但我发现检查属性定义效果很好。下面的函数将只传递在传递给函数的参数变量中具有相应属性的参数。

getLogs(parameters) {

// Initialize Params Object
let params = new HttpParams();

// Begin assigning parameters
if (!_.isUndefined(parameters)) {
params = _.isUndefined(parameters.valueOne) ? params : params.append('firstParameter', parameters.valueOne);
params = _.isUndefined(parameters.valueTwo) ? params : params.append('secondParameter', parameters.valueTwo);
}

// Make the API call using the new parameters.
return this._HttpClient.get(`${API_URL}/api/v1/data/logs`, { params: params })

关于Angular 4 HttpClient 查询参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45470575/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com