做小程序开发,页面跳转绝对是最基础也最高频的操作。无论是点击按钮进入详情页,还是切换底部导航栏,都离不开它。这功能听起来简单,但要在不同业务场景下选对跳转方式,里面其实藏着不少细节。
如果仅仅是做个简单的静态链接,直接用 <navigator> 组件最省事。它的用法和网页里的 <a> 标签很像,在 wxml 里声明一下就行:
<navigator url="/pages/secondPage/secondPage">跳转到第二个页面</navigator>

这里的
url 就是目标页面的路径。默认情况下它是普通跳转,如果加上 open-type="redirect",就会变成重定向跳转:
<navigator url="/pages/secondPage/secondPage" open-type="redirect">重定向跳转</navigator>
但在实际业务里,我们通常需要在跳转前做些逻辑处理,比如校验表单或请求接口,这时候就得靠 JS API 来触发了。
最常用的是
wx.navigateTo,在点击事件里调用它就能实现普通跳转:wx.navigateTo({
url: '/pages/secondPage/secondPage'
})
这里有个实战中极易踩的坑:
navigateTo 会把当前页面保留在页面栈里。微信对页面栈的深度有严格限制,最多只能压入 10 层。如果你的应用层级比较深,一路都用这个方法跳,到最后就会尴尬地发现页面“跳不动”了。
如果遇到不需要用户再退回上一页的场景(比如支付完成后的结果页),换成
wx.redirectTo 会更合适:wx.redirectTo({
url: '/pages/secondPage/secondPage'
})
重定向的机制是直接关闭当前页面,然后再打开新页面。这样页面栈就不会无限叠加,能有效避免栈溢出的问题。
除了普通页面,开发中还经常遇到一种让人头疼的情况:想跳转到一个底部导航栏页面,用前面两个方法死活跳不过去,控制台还会报错。这时候就必须用
wx.switchTab 了:
wx.switchTab({
url: '/pages/secondPage/secondPage'
})
需要特别注意的是,
switchTab 只能跳转到 app.json 的 tabBar 字段里配置过的页面。而且在跳转时,它会把其他非 Tab 页面全部销毁。这其实是微信为了控制小程序内存占用而特意做的设计。把这些底层逻辑理顺后,写代码时就能根据具体场景灵活选择了。需要保留返回路径就用普通跳转,单向流程就用重定向,主框架切换就老老实实用 Tab 跳转。选对了方式,不仅代码逻辑更清晰,用户的交互体验也会流畅自然得多。
تسجيل الدخول الآن