【微信小程序】几个路由函数(wx.switchTab、wx.reLaunch、wx.redirectTo、wx.navigateTo、wx.navigateBack)的用法

在微信公众平台的小程序开发文档里,目前微信提供的路由函数有5个,由于本人在编写代码的时候碰到了问题(花了近一个早上才找到了解决方案,所以想记录下就这个问题),顺便再重新上去查阅了下,记录下这个几个函数的用法。


①首先是wx.switchTab,用这个函数的前提是,你的app.json下要添加tabBar并且有list(里面的属性一般不能少于2个,但是也不能多于5个),也就是说你的小程序要有底部导航栏,刚刚已经说了如果你有导航栏的话,导航栏一般是2到5个。

用法也是比较简单,就是关闭其他所有非 tabBar 页面,跳转到 tabBar 页面。从wx.switchTab(Object object)中,可以看到可传入的参数类型是object类型,提供的参数有:


调用示例:

//app.json
{
  "tabBar": {
    "list": [
      {
        "pagePath": "pages/index/index",
        "text": "首页"
      },
      {
        "pagePath": "pages/other/other",
        "text": "其他"
      }
    ]
  }
}


//然后在相应的js页面里
wx.switchTab({
  url: 'pages/index/index'
})

这样就可以跳转到别的导航栏里。


②接下来是wx.reLaunch,这个到目前为止,本人基本没怎么用到过,不过还是简单记录下:意思就是关闭所有页面,跳转到小程序内的某个页面。wx.reLaunch(Object object),参数也是object类型,用法与wx.switchTab一样,这里就省略了。

调用示例:

//你想用在的.js里
wx.reLaunch({
  url: 'page页面的完整路径?id=1'
})
//需要跳转的应用内页面路径,路径后可以带参数。参数与路径之间使用?分隔,参数键与参数值用=相连,不同参数用&分隔;如 'path?key=value&key2=value2'

③第三个是wx.redirectTo,它跟接下来的第四个wx.navigateTo函数有很多相似的地方。wx.redirectTo(Object object)是用在关闭当前页面,跳转到应用内的某个页面,但是不允许跳转到 tabbar 页面(这个算是它跟wx.switchTab最大的区别吧)。wx.redirectTo(Object object),参数也是object类型,用法跟前两个一样,这里就省略了。

调用示例:

//你想用在的.js里
wx.redirectTo({
  url: 'page页面的完整路径?id=2'
})
//需要跳转的应用内页面路径,路径后可以带参数。参数与路径之间使用?分隔,参数键与参数值用=相连,不同参数用&分隔;如 'path?key=value&key2=value2'

④第四个是wx.navigateTo,前面说了它跟wx.redirectTo有很多相似的地方。wx.navigateTo(Object object)也是不能跳到 tabbar 页面,保留当前页面,跳转到应用内的某个页面。参数也是object类型,用法跟前面一样,这里不再说。

//你想用在的.js里
wx.navigateTo({
  url: 'page页面的完整路径?id=3'
})
//需要跳转的应用内页面路径,路径后可以带参数。参数与路径之间使用?分隔,参数键与参数值用=相连,不同参数用&分隔;如 'path?key=value&key2=value2'

注:这里顺便说一下wx.redirectTo和wx.navigateTo的区别,wx.navigateTo导航到另一个页面,会将当前的页面隐藏起来,使页面进入hide状态,并不会关闭可以通过返回按钮回到当前的页面;redirectTo()会使当前界面进入unload状态,即关闭该页面,将无法回到当前页面。


⑤最后一个是wx.navigateBack,这个想重点记录下。当有底部导航栏时,我们可以通过wx.switchTab跳转到相应的导航栏里。加入我把要跳转过去的底部导航栏去掉后,原本页面的数据要想传过去,如果用wx.redirectTo和wx.navigateTo,那么需要在url路径后附加上参数,有点不太方便。这时候如果用wx.navigateBack这个函数的话,可通过 getCurrentPages 获取当前的页面栈,决定需要返回几层。wx.navigateBack(Object object)的参数依然是object类型,但是跟前面的有区别:

调用示例:

let pages = getCurrentPages(); //获得当前js页面里的pages里的所有信息。
 
let prevPage = pages[ pages.length - 2 ];  
 
//prevPage 是获取上一个页面的js里面的pages的所有信息。 -2 是上一个页面,以此类推。
 

 
//最后就是返回上一个页面。
 
wx.navigateBack({
 
    delta: 1  // 返回上一级页面
 
})

 

<think>嗯,我现在需要理解用户提供的这个代码片段:wx.redirectTo({ url: '/pages/home/index' })。看起来这是微信小程序中的一个API调用,但具体细节我需要仔细回忆和整理。 首先,wx.redirectTo微信小程序中的一个导航方法,用于页面跳转。用户可能想知道它的作用、用法以及注意事项。我记得redirectTonavigateTo的区别在于页面栈的管理,redirectTo会关闭当前页面,跳转到新页面,而navigateTo会保留当前页面,新页面压入栈中。这点需要注意,避免用户混淆。 接下来,参数部分。这里的url指定了目标页面的路径,即'/pages/home/index'。需要确认路径是否正确,是否需要绝对路径,以及页面是否在app.json中注册过。如果路径错误,跳转会失败,所以这是常见的问题点。 另外,页面栈的限制。微信小程序中页面栈最多十层,使用redirectTo不会增加栈深度,因为它替换当前页面。如果用户频繁跳转,可能需要考虑栈溢出问题,但redirectTo本身不会导致这个问题,因为它替换而非压入。 还有,redirectTo跳转的页面是否可以使用返回按钮回到上一个页面?答案是否,因为当前页面已经被关闭,所以返回会回到更之前的页面。这点需要向用户说明,避免误解。 另外,tabBar页面的跳转是否能用redirectTo?我记得不能,需要使用wx.switchTab,否则会报错。所以如果目标页面是tab页,这个方法不适用,用户需要注意。 还有生命周期的问题,当前页面的onUnload会被触发,目标页面的onLoad、onShow会被触发。如果有未保存的数据,可能需要处理这些生命周期函数。 最后,异步操作和回调函数wx.redirectTo是否支持异步?可能需要使用Promise或者async/await,但官方文档可能需要查阅确认。不过通常这些API是异步的,但回调函数的方式可能更常见。 总结一下,回答的结构应该包括:作用、用法、参数说明、注意事项(如页面栈、tabBar页面、生命周期等)、常见错误和示例。确保用户能一步步理解如何使用和避免问题。</think>### wx.redirectTo 功能介绍及使用说明 #### 1. **作用** `wx.redirectTo` 是微信小程序中用于 **关闭当前页面** 并 **跳转到应用内指定页面** 的 API。 - 与 `wx.navigateTo` 不同,`redirectTo` 会直接替换当前页面,**不会保留页面栈中的当前页面**。 - 用户无法通过返回按钮回到原页面。 --- #### 2. **基本语法** ```javascript wx.redirectTo({ url: '/pages/home/index', // 目标页面路径(必填) success() {}, // 跳转成功的回调 fail() {}, // 跳转失败的回调 complete() {} // 跳转结束的回调(无论成功/失败) }) ``` --- #### 3. **参数说明** - **`url`**(必填) 目标页面的路径,需以 `/` 开头,且必须在 `app.json` 的 `pages` 数组中注册。 - ✅ 正确示例:`/pages/home/index` - ❌ 错误示例:`pages/home/index`(缺少开头的 `/`) - **`success` / `fail` / `complete`**(可选) 用于监听跳转结果: ```javascript wx.redirectTo({ url: '/pages/home/index', success() { console.log('跳转成功'); }, fail(err) { console.error('跳转失败', err); } }); ``` --- #### 4. **注意事项** 1. **页面栈限制** - 小程序页面栈最多 **10 层**。 - `redirectTo` 不会增加页面栈深度(因为替换了当前页面)。 2. **无法跳转到 TabBar 页面** - 若目标页面是 `tabBar` 页面(定义在 `app.json` 的 `tabBar` 中),需改用 `wx.switchTab`。 3. **生命周期触发顺序** - 当前页面:触发 `onUnload` - 目标页面:触发 `onLoad`, `onShow` --- #### 5. **常见问题** 1. **路径错误** 若控制台报错 `Page "pages/home/index" is not found`,需检查: - 路径是否以 `/` 开头 - 页面是否已在 `app.json` 中注册 2. **跳转 TabBar 页面报错** 使用以下代码跳转 TabBar 页面: ```javascript wx.switchTab({ url: '/pages/tabbar/index' }); ``` --- #### 6. **代码示例** ```javascript // 点击按钮跳转到首页 Page({ gotoHomePage() { wx.redirectTo({ url: '/pages/home/index', success() { console.log('已跳转到首页'); } }); } }); ``` --- ### 总结 - **适用场景**:需要中断当前流程并完全跳转到新页面(如登录后跳转主页)。 - **替代 API**: - `wx.navigateTo`:保留当前页面,适合需要返回的场景。 - `wx.reLaunch`:关闭所有页面并打开新页面。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值