Angular 4 HttpClient 查询参数

2024-04-04

我一直在寻找一种将查询参数传递到 API 调用中的方法HttpClientModule's HttpClient并尚未找到解决方案。与旧的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 })
}

这将导致 API 调用以下 URL:

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

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


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

无论如何,语法几乎相同,但略有不同。而不是使用URLSearchParams()参数需要初始化为HttpParams()以及该范围内的财产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 在下面的评论中指出的,有很多很好的答案这个问题 https://stackoverflow.com/questions/45459532/why-httpparams-doesnt-work-in-multiple-line-in-angular-4-3/45459672#45459672至于如何分配多个参数。

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 })
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Angular 4 HttpClient 查询参数 的相关文章

随机推荐

  • 计算唯一对的数量并将计数存储在矩阵中

    我的问题类似于stackoverflow com q 7549410 https stackoverflow com q 7549410 我有配对数据 如下所示 ID ATTR 3 10 1 20 1 20 4 30 我想计算唯一对的数量并
  • Python 3 CSV 文件在打印时出现 UnicodeDecodeError: 'utf-8' 编解码器无法解码字节错误

    我在 Python 3 中有以下代码 用于打印 csv 文件中的每一行 import csv with open my file csv r newline as csvfile lines csv reader csvfile delim
  • 更改文件长度时,是否需要重新映射所有关联的 MappedByteBuffer?

    我有一个小而简单的存储系统 可以通过内存映射文件进行访问 由于我需要处理超过 2GB 的空间 因此我需要一个具有固定大小 如 2GB 的 MappedByteBuffer 列表 由于不同原因 我使用的空间较少 那么一切都相对简单 一个缓冲区
  • Nuxt 3 中的深色模式切换器无法与官方 @nuxtjs/color-mode 配合使用

    我想使用 tailwind 和推荐的 nuxtjs color mdoe 模块在我的 Nuxt 应用程序上实现深色模式 测试顺风的黑暗 类运行良好并且按预期工作 但是我无法使按钮切换器以编程方式设置颜色模式 我在 devDeps 中安装了
  • 将 props 传递给包装在 withRouter() 函数中的 React 组件

    我正在使用 React Router v4 在我的 React 应用程序中导航 下面是包裹在withRouter 函数使其能够在单击时更改路线 const LogoName withRouter history props gt h1 gt
  • 如何使用perl脚本删除重复行

    如何删除重复行 我当前的代码 use strict use warnings my input input txt my output output txt my seen open OP gt output or die open IP
  • SSRS - 条件文本格式(使用 Switch 的表达式)

    我将首先说明这些表达式在报告中确实有效 问题是他们没有一起工作 我目前有一个基于两列值格式化的列标题 根据 Column1 的值使用斜体和下划线 基于 Column2 值的粗体和特定颜色 我通过在文本属性中使用 Switch 表达式来完成此
  • 在 Swift 中实例化并呈现 viewController

    Issue 我开始看Swift Programming Language 不知怎的 我无法正确输入 a 的初始化UIViewController从具体的UIStoryboard In Objective C我简单地写 UIStoryboar
  • 如何使用 FFmpeg 从图像创建视频? [关闭]

    Closed 这个问题是与编程或软件开发无关 help closed questions 目前不接受答案 Locked 这个问题及其答案是locked help locked posts因为这个问题是题外话 但却具有历史意义 目前不接受新的
  • Rails 应用程序在服务器上速度很快,但从另一台机器访问时速度很慢

    我有一个 Rails 应用程序托管在服务器计算机上 运行 Webrick 当我登录到这台计算机并访问该应用程序 通过 localhost 3000 时 该应用程序运行顺利 但是 当我尝试从另一台计算机 通过主机名 3000 访问该应用程序时
  • 删除一行中重复的相同字符

    我正在尝试创建一种方法 该方法可以从字符串中删除所有重复项 或者根据参数仅在一行中保留相同的 2 个字符 例如 helllllllo gt helo or helllllllo gt hello 这保留了双字母 目前我通过执行以下操作删除重
  • Django 使用 sqlite3 设置?

    我正在尝试按照 django 网站上的演练进行操作 我下载了 sqlite 并将其保存在C Windows System32文件夹 当我编辑settings py文件我该放什么Name场地 我必须建立数据库吗 django 文献说 API
  • 使用 postgres 窗口函数重复行

    postgres 文档 http www postgresql org docs 9 1 static tutorial window html http www postgresql org docs 9 1 static tutoria
  • Argparse:来自文件的默认值

    我有一个 Python 脚本 它需要很多参数 我目前使用的是configuration ini文件 使用读取configparser 但希望允许用户使用命令行覆盖特定参数 如果我只有两个参数 我会使用类似的东西 if not arg1 ar
  • Java 8中basic和url base64编码的区别

    Java 8Base64 http docs oracle com javase 8 docs api java util Base64 html库有两种可用于 URI 构建的变体 基本 变体和 URL 和文件名安全 变体 该文档指出RFC
  • 外部调用的 Lambda 函数超时

    我有一个 Lambda 函数 需要从中进行外部 API 调用 我已将 Lambda 函数添 加到一个安全组 一个 VPC 和 2 个子网 它为我提供了以下文本 当您启用 VPC 时 您的 Lambda 函数将失去默认互联网 使用权 如果您需
  • 如何将字符串转换为 android.net.Uri

    问题 我发现java net URI有一个 create String uri 选项 但是android net uri才不是 进一步来说 我正在尝试获取 RingtoneManager 的输出RingtonePicker并将其设置为默认铃
  • 导入数据和事件溯源

    我目前正在开发一个整体系统 我希望将其引入现代并结合 DDD 和 CQRS 我收到了重新编写解决方案的导入机制的请求 并认为这可能是开始此重新架构过程的好机会 目前流程是 用户上传 CSV 系统解析 CSV 并在屏幕上显示每一行 对每一行以
  • AsyncSupportListenerAdapter primefaces 异常

    我是 jsf 的新人 我正在尝试使用 inf primefaces 做一些示例 当我尝试运行这个示例时 http www primefaces org showcase labs push chat jsf http www primefa
  • Angular 4 HttpClient 查询参数

    我一直在寻找一种将查询参数传递到 API 调用中的方法HttpClientModule s HttpClient并尚未找到解决方案 与旧的Http模块你会写这样的东西 getNamespaceLogs logNamespace Setup