微信小程序路由详解

本文详细介绍了微信小程序的路由管理,包括页面栈的概念、不同路由方式(wx.switchTab、wx.reLaunch、wx.redirectTo、wx.navigateTo 和 wx.navigateBack)的功能描述、参数说明,以及在页面生命周期中的表现。同时,强调了navigateTo、redirectTo只能打开非 tabBar 页面,switchTab只能打开 tabBar 页面,而reLaunch可以打开任意页面。此外,还提到页面底部tabBar的显示规则以及如何在目标页面获取路由参数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

页面栈

框架以栈的形式维护了当前的所有页面。 当发生路由切换的时候,页面栈的表现如下:

路由方式页面栈表现
初始化新页面入栈
打开新页面新页面入栈
页面重定向当前页面出栈,新页面入栈
页面返回页面不断出栈,直到目标返回页
Tab 切换页面全部出栈,只留下新的 Tab 页面
重加载页面全部出栈,只留下新的页面

路由方式

对于路由的触发方式以及页面生命周期函数如下:

初始化

触发时机:小程序打开的第一个页面

路由后页面:onLoad, onShow

打开新页面

触发时机: 调用 API  wx.navigateTo   使用组件<navigator open-type="navigateTo/>"

路由前页面:onHide

路由后页面:onLoad, onShow

页面重定向

触发时机:调用 API  wx.redirectTo   使用组件<navigator open-type="redirectTo/>"

路由前页面:onUnload

路由后页面:onLoad, onShow

页面返回

触发时机: 调用 API  wx.navigateBack   使用组件<navigator open-type="navigateBack/>"

路由前页面:onUnload

路由后页面:onShow

Tab 切换

触发时机: 调用 API  wx.switchTab   使用组件<navigator open-type="switchTab/>"

路由后页面:各种情况请参考下表

Tab 切换对应的生命周期(以 A、B 页面为 Tabbar 页面,C 是从 A 页面打开的页面,D 页面是从 C 页面打开的页面为例)

当前页面路由后页面触发的生命周期(按顺序)
AANothing happend
ABA.onHide(), B.onLoad(), B.onShow()
AB(再次打开)A.onHide(), B.onShow()
CAC.onUnload(), A.onShow()
CBC.onUnload(), B.onLoad(), B.onShow()
DBD.onUnload(), C.onUnload(), B.onLoad(), B.onShow()
D(从转发进入)AD.onUnload(), A.onLoad(), A.onShow()
D(从转发进入)BD.onUnload(), B.onLoad(), B.onShow()

重启动

触发时机: 调用 API  wx.reLaunch   使用组件<navigator open-type="reLaunch/>"

路由前页面:onUnload

路由后页面:onLoad, onShow

注意事项

  • navigateTo, redirectTo只能打开非 tabBar 页面。
  • switchTab只能打开 tabBar 页面。
  • reLaunch可以打开任意页面。
  • 页面底部的 tabBar 由页面决定,即只要是定义为 tabBar 的页面,底部都有 tabBar。
  • 调用页面路由带的参数可以在目标页面的onLoad中获取。

wx.switchTab

功能描述

跳转到 tabBar 页面,并关闭其他所有非 tabBar 页面

参数

Object object

属性类型默认值必填说明
urlstring需要跳转的 tabBar 页面的路径 (代码包路径)(需在 app.json 的 tabBar 字段定义的页面),路径后不能带参数。
successfunction接口调用成功的回调函数
failfunction接口调用失败的回调函数
completefunction接口调用结束的回调函数(调用成功、失败都会执行)

wx.reLaunch

功能描述

关闭所有页面,打开到应用内的某个页面

参数

Object object

属性类型默认值必填说明
urlstring需要跳转的应用内页面路径 (代码包路径),路径后可以带参数。参数与路径之间使用?分隔,参数键与参数值用=相连,不同参数用&分隔;如 'path?key=value&key2=value2'
successfunction接口调用成功的回调函数
failfunction接口调用失败的回调函数
completefunction接口调用结束的回调函数(调用成功、失败都会执行)

wx.redirectTo

功能描述

关闭当前页面,跳转到应用内的某个页面。但是不允许跳转到 tabbar 页面。

参数

Object object

属性类型默认值必填说明
urlstring需要跳转的应用内非 tabBar 的页面的路径 (代码包路径), 路径后可以带参数。参数与路径之间使用 ? 分隔,参数键与参数值用 = 相连,不同参数用 & 分隔;如 'path?key=value&key2=value2'
successfunction接口调用成功的回调函数
failfunction接口调用失败的回调函数
completefunction接口调用结束的回调函数(调用成功、失败都会执行)

wx.navigateTo

功能描述

保留当前页面,跳转到应用内的某个页面。但是不能跳到 tabbar 页面。使用 wx.navigateBack 可以返回到原页面。小程序中页面栈最多十层。

参数

Object object

属性类型默认值必填说明
urlstring需要跳转的应用内非 tabBar 的页面的路径 (代码包路径), 路径后可以带参数。参数与路径之间使用 ? 分隔,参数键与参数值用 = 相连,不同参数用 & 分隔;如 'path?key=value&key2=value2'
eventsObject页面间通信接口,用于监听被打开页面发送到当前页面的数据。基础库 2.7.3 开始支持。
successfunction接口调用成功的回调函数
failfunction接口调用失败的回调函数
completefunction接口调用结束的回调函数(调用成功、失败都会执行)

object.success 回调函数

参数

Object res

属性类型说明
eventChannelEventChannel和被打开页面进行通信

wx.navigateBack

功能描述

关闭当前页面,返回上一页面或多级页面。可通过 getCurrentPages 获取当前的页面栈,决定需要返回几层。

参数

Object object

属性类型默认值必填说明
deltanumber1返回的页面数,如果 delta 大于现有页面数,则返回到首页。
successfunction接口调用成功的回调函数
failfunction接口调用失败的回调函数
completefunction接口调用结束的回调函数(调用成功、失败都会执行)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值