小程序里的页面跳转,几乎每个项目都会碰到。从首页进入详情页、从活动入口打开外部 H5,或者从一个小程序跳到另一个小程序,背后都需要处理跳转链接。和浏览器不同,小程序里不能像网页那样随意使用 location 跳转,官方把这类能力收敛到了组件和 API 里,开发者得根据具体场景选择合适的方式。
最直接的写法是在 WXML 里用 navigator 组件。它有点像网页里的 <a> 标签,但属性差别很大。比如跳转详情页可以这样写:
<navigator url="/pages/detail/detail">点击跳转</navigator>
这里的
url 指向小程序内部页面路径。除了默认跳转,navigator 还可以通过 open-type 切换行为,比如 redirect、switchTab、reLaunch。实际开发里容易踩坑的是跳转 tabBar 页面,这时不能用默认的 navigate,而要设置 open-type 为 switchTab,否则页面可能打不开。如果跳转不是简单点击,而是需要先判断、拼参数,或者由某个事件触发,就可以改用 API 来控制。常用的有
wx.navigateTo 和 wx.redirectTo。wx.navigateTo 会保留当前页面,用户返回时还能回到上一页,适合列表进详情、商品进下单页这类操作;wx.redirectTo 则会替换当前页面,用户无法再返回,常用于登录成功后跳首页、提交结果页等场景。调用方式大致是:wx.navigateTo({
url: '/pages/detail/detail?id=123'
})
需要留意,
wx.navigateTo 有页面层级限制,连续跳转太多层可能失败。遇到层级较深或需要清空历史栈的情况,可以考虑 wx.reLaunch。跳转 tabBar 页面则用 wx.switchTab。如果要把用户带到另一个小程序,就需要调用 wx.navigateToMiniProgram,并在参数里带上目标小程序的 appId 和路径。
当项目里的跳转逻辑越来越多——比如跳转前要校验登录状态、记录埋点、统一拼接渠道参数,或者不同端需要落到不同页面——继续在各页面里散落 API 调用就会比较麻烦。这时可以考虑封装一个自定义跳转组件或统一的跳转方法,把参数处理、拦截逻辑和跳转动作收口。哪个入口需要跳转,就调用这个组件或方法,后续规则变化时只改一处,维护成本会低不少。
实现跳转本身不算复杂,但有几点容易出错。首先,目标地址必须合法可访问:内部页面路径要真实存在,外部网页要结合
web-view 组件使用,并在后台配置业务域名,否则会出现打不开或提示错误。其次,代码要符合小程序的结构规范,navigator 组件的位置、路径参数拼接都要小心。最后,跳转逻辑上线前必须测试,尤其是返回路径、参数传递和异常场景。很多问题并不是跳转本身出错,而是参数丢了,或者返回后页面状态没有处理好。
从使用习惯来看,简单页面用
navigator 最省事,事件驱动或带参数时用 API 更灵活,逻辑复杂且多个入口复用时再考虑自定义封装。根据场景选对方式,后续维护会轻松很多。
Se Connecter Maintenant