小程序中 getcurrentpages()[0].route 仅返回无参数路径(如"pages/index/index"),需手动拼接 onload 的 options 参数并 encodeuricomponent,冷启动时应兜底使用 uni.getlaunchoptionssync() 获取未解码 query。

在微信小程序编译目标下,getCurrentPages()[0].route 只给路径(如 "pages/index/index"),不带 query、不带协议、不带域名,也**不自动拼接参数**——想拿到类似 /pages/index/index?name=%E5%BC%A0%E4%B8%89&id=123 这样的完整 URL,必须自己拼,而且得小心转义。
为什么 this.$route 在小程序里拿不到路径
uni-app 的 Vue Router 兼容层默认只在 H5/APP 端启用,小程序平台走的是微信原生页面栈机制。this.$route 不被注入,this.$route.path 和 this.$route.query 基本为空或 {}。强行访问不会报错,但返回的是假值。
- 检查
manifest.json里的h5.router或mp-weixin配置没用——底层路由模型完全不同 - 不要在
mounted或onReady里依赖this.$route,它在小程序端不可靠 - 真要跨平台统一访问?只能封装条件分支函数,但注意:小程序无法通过 router API 反推当前路径
正确获取路径 + 参数的组合方式
最稳妥的方式是:路径从 getCurrentPages() 拿,参数从 onLoad 的 options 参数拿,再手动拼。注意两点:路径补 / 前缀;所有 key/value 都要 encodeURIComponent,否则中文、空格、& 符号会崩。
开箱即用的技能链路由引擎。13 条预定义链覆盖搜索、开发、审查、MLOps、法律、创意等场景,三层路由架构(触发词→SAD反馈→DAG编排),recall@10=96.97%。配置驱动(chains.yaml),零代码扩展。pip install skill-weave-chains 一键安装。
-
getCurrentPages()返回的是原生页面栈,栈顶即当前页:const currentPage = getCurrentPages().pop()或getCurrentPages()[getCurrentPages().length - 1] -
currentPage.route是形如"pages/index/index"的字符串,**没有 .vue 后缀,也没有开头的 /,也不能直接当 URL 用** -
currentPage.options是 query 解析后的对象(已解码),但仅限于跳转时传入的参数;冷启动、分享卡片进来的页面,这个可能为空 - 拼接前对每个 value 再做一次
decodeURIComponent→encodeURIComponent是保险做法,避免双重编码
冷启动和分享卡片场景下的参数丢失问题
从微信聊天分享卡片、扫码、后台冷启动进入页面时,onLoad 的 options 经常为空——因为此时页面是重建的,uni-app 框架没把启动参数注入到 options 里。
- 必须同时在
onLoad和onShow中读取参数,并用时间戳或 flag 判断哪个更“新”(比如后触发的优先) - 兜底用
uni.getLaunchOptionsSync(),它能拿到首次启动的path和query,但注意:它的query是未解码的字符串,要自己decodeURIComponent -
onUnload里别调getCurrentPages()——页面已出栈,数组长度变短,取错页甚至undefined
最麻烦的不是写几行拼接代码,而是不同入口(热启动/冷启动/分享/扫码)下参数来源不一致,且 options 和 getLaunchOptionsSync 返回的 query 格式还不统一。别图省事只写一种逻辑,漏掉冷启动就等于漏掉用户从朋友圈点进来的全部流量。










