当前位置: 首页 > news >正文

HarmonyOS URL 参数处理实战:getQueryValue 与 getParamsUrl 详解

文章目录

    • 前言
      • 背景:URL 结构复习
      • getQueryValue:从 URL 中取出指定参数的值
      • getParamsUrl:动态拼接 URL 参数
      • Map 和 Record 两种格式,怎么选
      • 追加 vs 替换:第三个参数的区别
      • 实际项目中的使用场景
      • 写在最后

前言

近期发现一款很有意思的HarmonyOS 三方库, 地址 @pura/harmony-utils(V1.4.0) , 作者是"桃花镇童长老", 我这里也是直接通过该作者公布的源码进行案例编写进行,写了到目前写了一部分demo ,感觉确实很有帮助,这里呢也是开始写一个系列的演示demo 供大家参考。如有帮助可以在OpenHarmony中进行下载安装进行使用哦

案例demo导航展示

↓↓↓↓↓↓接下来言归正传 ↓↓↓↓

做 HarmonyOS 应用时,处理 URL 参数是个高频需求:H5 页面跳转带参数、后台接口 URL 里取某个字段的值、动态拼接查询参数……每次都自己用字符串 split 或写正则,太麻烦了,FormatUtil 提供了两个专门处理这些的工具。

背景:URL 结构复习

在看代码前,先简单回顾一下 URL 的结构:

https://example.com/api?name=若城&age=18&city=深圳 ↑ 问号后面是查询参数(query string)

查询参数是key=value对,多个参数用&分隔。还有一个细节:中文会被 URL 编码成%E8%8B%A5...的形式。

演示代码里预设了一个 URL:

@StateinputUrl:string='https://example.com/api?name=若城&age=18&city=深圳';@StateinputUrlKey:string='name';

getQueryValue:从 URL 中取出指定参数的值

// 从 URL 中取 'name' 参数的值constv=FormatUtil.getQueryValue(this.inputUrl,this.inputUrlKey);this.addLog(`getQueryValue("${this.inputUrlKey}"):${v}`);// getQueryValue("name"): 若城

两个参数:

  1. 完整的 URL 字符串
  2. 要取的参数名(key)

返回对应的值,如果参数不存在则返回undefined或空字符串。

URL 中的中文值会自动解码:name=若城取出来就是'若城',不是编码后的%E8%8B%A5%E5%9F%8E

演示代码里直接嵌了按钮点击逻辑,注意 try-catch:

Button('getQueryValue').height(38).fontSize(13).backgroundColor('#00796B').onClick(()=>{try{constv=FormatUtil.getQueryValue(this.inputUrl,this.inputUrlKey);this.addLog(`getQueryValue("${this.inputUrlKey}"):${v}`);}catch(e){this.addLog(`getQueryValue 失败:${e}`);}})

URL 格式异常时可能抛出异常,所以套了 try-catch。

getParamsUrl:动态拼接 URL 参数

这个方向反过来:我有一个 URL 和一组参数,要把参数拼接到 URL 上。

用 Map 传参,覆盖模式false= 用新参数替换原有同名参数):

constparams=newMap<string,string>([['token','abc123'],['v','2']]);consturl=FormatUtil.getParamsUrl(this.inputUrl,params,false);this.addLog(`getParamsUrl(Map):${url}`);// https://example.com/api?token=abc123&v=2// 注意:false 模式会用新参数替换原有查询参数

用 Record 传参,追加模式true= 在原有参数基础上追加):

constparams:Record<string,string>={};params['debug']='true';params['t']=Date.now().toString();consturl=FormatUtil.getParamsUrl(this.inputUrl,params,true);this.addLog(`getParamsUrl(Record,append):${url}`);// https://example.com/api?name=若城&age=18&city=深圳&debug=true&t=1716624000000

三个参数:

  1. 原始 URL
  2. 参数:Map<string, string>Record<string, string>
  3. 是否追加(true= 追加到原有参数,false= 替换原有参数)

Map 和 Record 两种格式,怎么选

getParamsUrl支持两种格式传参,各有适合的场景:

Map:参数顺序固定,适合有顺序要求的场景

// Map:保持插入顺序constparams=newMap<string,string>([['token','abc123'],['v','2']]);

Record:字面量风格,写起来更简洁

// Record:适合动态构建constparams:Record<string,string>={};params['debug']='true';params['t']=Date.now().toString();

两种格式功能上完全等价,选哪个看你的使用习惯。

追加 vs 替换:第三个参数的区别

这是最容易搞混的地方,举个例子来说明:

原始 URL:https://example.com/api?name=若城&age=18

追加{ v: '2' }

  • append = truehttps://example.com/api?name=若城&age=18&v=2(原参数保留)
  • append = falsehttps://example.com/api?v=2(原参数被清除)

使用场景:

  • append = true:给已有 URL 添加额外参数(如 token、时间戳)
  • append = false:完全重新设置查询参数

实际项目中的使用场景

场景 1:WebView 跳转时追加 token

constbaseUrl='https://m.example.com/home';constparams:Record<string,string>={};params['token']=GlobalContext.getContext().get<string>('token')??'';params['platform']='harmonyos';constfinalUrl=FormatUtil.getParamsUrl(baseUrl,params,true);// 在 WebView 里加载 finalUrl

场景 2:分享链接加上用户 ID

constshareUrl='https://example.com/article/123';constparams=newMap<string,string>([['invite',userId]]);constshareLink=FormatUtil.getParamsUrl(shareUrl,params,true);

写在最后

两个 URL 工具方法,职责分明:

  • getQueryValue:从 URL 里取某个参数的值,自动解码
  • getParamsUrl:给 URL 动态追加或替换参数

比自己手写 URLSearchParams 或者正则解析要简洁很多,也不容易出 URL 编码相关的 bug。

http://www.gsyq.cn/news/1417483.html

相关文章:

  • 2026 年 5 月初级会计备考突围:时间管理与刷题工具避坑指南 - 讲清楚了
  • 2026跨越速运大件寄件省钱攻略!4个零套路正规平台,碾压官方高价渠道 - 时讯资讯
  • 2026年三维可视化开发,我只推荐这 5大 3D渲染引擎
  • 从算力到存力:AI性能的决定性因素正在重构
  • 2026超声波冷热量表国产品牌深度测评:十大品牌技术实力与选型全解析 - 水质仪表品牌排行榜
  • 别再混用网络了!用华为VRF给生产网和办公网做个“物理隔离”(附CE交换机配置命令)
  • 2026 指南:台州市椒江区彩金回收 白银回收 黄金回收 铂金回收店铺推荐及联系方式 - 资讯快报
  • 废旧零件DIY蓝牙音箱:从电路原理到3D打印外壳的完整实践
  • HarmonyOS 全局缓存不乱:GlobalContext Key 管理与泛型安全取值模式
  • 2026年游乐设备厂家推荐排行榜:学校/社区/公园/幼儿园/商场/室内/无动力游乐设备品牌精选! - 品牌企业推荐师(官方)
  • LeetCode 210:课程表 II | 拓扑排序
  • 2026德邦大件寄件省钱指南!4个无套路靠谱平台,告别寄快递高价坑 - 时讯资讯
  • 小鹿管家·小红书助手|多账户批量管理神器,让广告投放效率提升10倍!
  • 智能体时代:Elastic 在 Google Cloud Next 2026
  • 2026 年 5 月会计备考突围:真题 APP 高效刷题实测与避坑指南 - 讲清楚了
  • LeetCode 743:网络延迟时间 | Dijkstra
  • 赤峰车衣贴膜哪家好?本地门店权威盘点(排行 + 地址 + 电话) - 资讯快报
  • INP>300ms 直接掉排名:5 月后 Core Web Vitals 成硬门槛
  • 东南亚开发者紧急预警:Gemini API v1.5.3起强制启用语言检测白名单,未注册老接口将于2024年Q3停用(附6国语言注册迁移checklist)
  • 2026 深圳 UPS 电源供应商哪家靠谱?主流品牌授权合作渠道全解析 - 小艾信息发布
  • 告别Windows!在Ubuntu 22.04上搞定NI-VISA驱动,让你的USB示波器跑起来
  • 2026年上海办公室装修公司多角度解析 - 资讯快报
  • 聊聊华为“韬定律”:穿越旧秩序的冷眼,重写新规则的标尺
  • Path of Building PoE2 3大核心功能深度解析:天赋树系统、物品管理与交易集成
  • Chatbox:一站式AI对话桌面客户端如何解决多模型切换难题
  • 终极指南:3分钟掌握ffmpegGUI,告别复杂的视频处理命令行
  • 告别手动填坑!Apifox测试数据与CSV文件实战:从登录场景到中文乱码解决
  • 2026曲靖卫生间免砸砖防水、外墙、地下室、楼顶渗漏+彩钢瓦、阳光房渗漏 本地专业防水公司TOP5权威推荐(2026年6月本地最新深度调研) - 防水百科
  • 中小企业别乱买云服务器!这5个坑踩一个就亏大了(附选型避坑指南)
  • Word打不开报0xc0000142?除了重装,这3个被忽略的Win10系统级检查项你得知道