做小程序时,页面之间的跳转很少只是“点一下过去”。很多情况下,前一页已经留下了一些上下文:用户点了哪条数据、从哪个入口进来、带了哪些筛选条件。这些信息如果没传过去,下一页就很难正确展示内容。
用链接带参数,是处理这类需求很自然的方式。它写起来直观,调试时也方便,基本能直接看出当前页面收到了什么。
最基础的场景,是页面A要把 param1 和 param2 传给页面B。通常可以构造一个带 query 的跳转地址,比如 /pages/pageB/index?param1=value1¶m2=value2。用户点击后,页面B被打开,小程序框架会把链接上的参数解析成 options,交给页面初始化逻辑处理。

在页面B的 js 文件里,通常可以在 onLoad 里接收:
onLoad(options) { console.log(options.param1); // value1 console.log(options.param2); // value2 }
参数接住之后,后续逻辑会顺畅很多。比如根据 param1 判断请求哪个接口,根据 param2 决定展示哪套文案或样式。再比如用户从搜索结果进入商品详情时,把商品 id 带过去,详情页拿到 id 再拉完整信息,就不需要把整条数据都塞进链接里。
有个细节容易被忽略:options 里的值通常都是字符串。哪怕前面传的是数字,到了下一页也可能要先转一下类型,再参与比较或计算。这个细节不大,但忽略之后,条件判断很容易出现“看起来一样,结果没生效”的情况。

如果目标页面是 tabBar 页面,处理方式就不能太随意。tabBar 页面和普通页面在跳转规则上往往不完全一样,普通 query 并不总是能直接透传过去。实际项目里,通常会先判断当前要跳的是哪类页面,再选择对应的跳转方式。有些封装好的路由还会额外约定一个标识,比如加上 switchTab: true,用来提醒当前应该走 tabBar 分支。至于参数能不能直接拿、需要在全局变量还是缓存里中转,最好还是按项目里的跳转方案来定。

除了简单字符串,有些场景确实会碰到复杂数据结构。比如一个对象里有多个字段,开发者希望一次性传给下一页。如果框架或路由封装支持对象透传,页面B就可以从 options.obj 里继续取值:
onLoad(options) { console.log(options.obj.param1); // value1 console.log(options.obj.param2); // value2 }
不过,这类做法更适合轻量字段,或者已经约定好的序列化格式。如果对象太大、层级太深,或者包含特殊字符,直接放进链接里很容易变复杂,调试时也不友好。更常见的折中方式,是只传一个能定位数据的标识,比如 id、code 或 type,进入页面后再通过接口获取完整内容。这样既能保证页面之间的联动,又不会因为参数过长、编码异常影响跳转体验。
页面之间如果能准确接住这些参数,用户从哪个入口进来、带着什么条件进入、下一屏该展示什么,链路就不会断。看似只是几个 query 参数,真正影响的是操作体验和交互完整度。
立即登入