当前位置: 首页 > 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.jsqmd.com/news/906180/

相关文章:

  • 豆包与抖音内容生态联动实测报告
  • 小米 MiMo V2.5 邀请码 WYMVM4
  • 2026跨越速运大件寄件省钱攻略!4个零套路正规平台,碾压官方高价渠道 - 时讯资讯
  • 森利威尔 SL3043|10-120V 宽压输入 1.25-50V 可调 10A 大电流电源芯片
  • 2026寄快递省钱干货:壹米滴答大件低价渠道+全场景靠谱寄件平台盘点 - 时讯资讯
  • 贾子 AI:基于真理约束的认知革命
  • GC-16MC-LZ门侧送暖风机适配哪些采暖场景
  • 2026年三维可视化开发,我只推荐这 5大 3D渲染引擎
  • 从算力到存力:AI性能的决定性因素正在重构
  • 2026国产插入式超声波流量计十大品牌深度测评:技术参数、市场表现与选型指南 - 水质仪表品牌排行榜
  • 2026大连税务申报:机构深度测评榜单! - 小柏云
  • 2026超声波冷热量表国产品牌深度测评:十大品牌技术实力与选型全解析 - 水质仪表品牌排行榜
  • Scala核心编程(八)面向对象编程(高级特性)
  • 嘉兴哪里可以做白发养黑?黑奥秘针对性解决问题,科学养黑路径 - 美业信息观察
  • 若依框架数据权限发分析
  • 别再混用网络了!用华为VRF给生产网和办公网做个“物理隔离”(附CE交换机配置命令)
  • 2026 指南:台州市椒江区彩金回收 白银回收 黄金回收 铂金回收店铺推荐及联系方式 - 资讯快报
  • 赤峰车衣门店排行|首选赤峰美车堡 XPEL 超级旗舰店(推荐指数 4.9 分) - 资讯快报
  • 2026年 矿用局部通风机厂家/厂家推荐榜:运城局扇风机/防爆型/对旋/FBCD抽出式/FBD轴流/六边形可拆卸通风机实力工厂与技术口碑深度解析 - 品牌企业推荐师(官方)
  • 2026年多场景LED显示屏源头厂商综合评估报告 - 品牌企业推荐师(官方)
  • 2026 年青岛 UPS 不间断电源供应商怎么选?主流品牌授权服务商盘点 - 小艾信息发布
  • LeetCode 207:课程表 | 拓扑排序
  • GitNexus 图文使用教程:为你的代码库构建知识图谱
  • HarmonyOS 全局缓存不乱:GlobalContext Key 管理与泛型安全取值模式
  • 向量空间JBoltAI :让Agent推理从黑盒走向透明
  • 笔试训练48天:
  • 2026年游乐设备厂家推荐排行榜:学校/社区/公园/幼儿园/商场/室内/无动力游乐设备品牌精选! - 品牌企业推荐师(官方)
  • 2026平民寄件避坑指南:低价平台优缺点全解,德邦及主流快递最便宜下单渠道 - 时讯资讯
  • 2026 赤峰车膜门店推荐排行:首选这家,口碑与实力双第一 - 资讯快报
  • 南京专业中央空调风口清洗维修公司推荐:南京杰达家居科技有限公司服务详解 - 速递信息