uniapp页面路由跳转方式

uni.navigateTo

保留当前页面,跳转到应用内的某个页面,使用uni.navigateBack可以返回到原页面

Example:

uni.navigateTo({
    url: 'path/to/page?id='+id 
});

uni.redirectTo

关闭当前页面,跳转到应用内的某个页面。使用该方法进行页面跳转时,当前页面将会被销毁

Example:

uni.redirectTo({
    url: 'path/to/page?id='+id 
});

uni.reLaunch

关闭所有页面,打开到应用内的某个页面。相当于是关闭所有页面,然后跳转到指定页面

注意
1. 如果调用了 uni.preloadPage(OBJECT) 不会关闭,仅触发生命周期 onHide;
2. 如果跳转的页面路径是 tabBar 页面则不能带参数
3. H5端调用uni.reLaunch之后原来的页面栈会销毁,但是无法清空浏览器原来的历史记录,此时navigateBack不能返回,如果存在历史记录的话点击浏览器的返回按钮或者调用history.back()仍然可以导航到浏览器的其他历史记录

Example:

uni.reLaunch({
    url: 'path/to/page?id='+id 
});

uni.switchTab

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

注意: 如果调用了 uni.preloadPage(OBJECT) 不会关闭,仅触发生命周期 onHide

Example:

uni.reLaunch({
    url: 'path/to/page'
});

uni.navigateBack

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

注意: 如果调用了 uni.preloadPage(OBJECT) 不会关闭,仅触发生命周期 onHide

Example:

// 注意:调用 navigateTo 跳转时,调用该方法的页面会被加入堆栈,而 redirectTo 方法则不会。见下方示例代码

// 此处是A页面
uni.navigateTo({
	url: 'B?id=1'
});

// 此处是B页面
uni.navigateTo({
	url: 'C?id=1'
});

// 在C页面内 navigateBack,将返回A页面
uni.navigateBack({
	delta: 2
});

uni.preloadPage

预加载页面,是一种性能优化技术。被预载的页面,在打开时速度更快,预加载 /pages/test/test 对应的 js 文件,不执行页面预渲染逻辑。

注意:
1.仅支持App-nvue 平台
2.预加载时触发生命周期 onLoad,onReady,不触发 onShow
3.打开新页面时,url 完全相同(包含参数)时,优先使用预加载页面,触发生命周期 onShow
4.tabbar页面,仅支持预加载尚未显示过的页面,否则返回 fail,提示 already exists
5.同一时间,相同 url 仅 preloadPage 一次
6.当同一个预载页面已被打开(在路由栈),再次打开相同url时,不再使用该预加载页面,而是打开新的非预载页面
7.uni.reLanuch, uni.switchTab, uni.navigateBack(含Android返回键) 切换页面时,预加载页面不会被销毁,仅触发生命周期 onHide
8.在预载页面使用 uni.redirectTo 时,预加载页面会被销毁,触发生命周期 onUnload

Example:

uni.preloadPage({url: "/pages/test/test"});

uni.unPreloadPage

取消预加载页面

注意:
1.仅支持App-nvue 平台
2.当预载页面未被打开时,使用 unPreloadPage时会销毁该页面,触发生命周期 onUnload
3.当预载页面已被打开时,使用 unPreloadPage时不销毁该页面,但该预加载页面不再继续存在,会随着路由变化而销毁

项目中遇到过的问题

场景:从小程序进入商城,点击banner页中的其中一个答题抽奖活动
问题:完成答题抽奖后还能返回到抽奖页面和答题页面
预期:完成答题抽奖后左上角icon变为返回首页icon,只能返回到小程序banner页
解决方法:一开始我只在h5页面中答题跳转到抽奖页面时设置了uni.reLaunch,并未生效,应在小程序跳转到h5页面时将wx.navigateTo换成wx.reLaunch即可解决

小结

  • url有长度限制,太长的字符串会传递失败,可改用窗体通信、全局变量,另外参数中出现空格等特殊字符时需要对参数进行编码,如下为使用encodeURIComponent对参数进行编码的示例。
uni.navigateTo({
             url:
               `'/pages/test/test?item=` +
               encodeURIComponent(JSON.stringify(item)),
           });
// 在test.vue页面接收参数
onLoad: function (option) {
  const item = JSON.parse(decodeURIComponent(option.item));
}
  • 跳转到 tabBar 页面只能使用 switchTab 跳转
  • navigateTo, redirectTo 只能打开非 tabBar 页面。
  • switchTab 只能打开 tabBar 页面。
  • 页面底部的 tabBar 由页面决定,即只要是定义为 tabBar 的页面,底部都有 tabBar。
  • 不能在首页 onReady 之前进行页面跳转。
  • H5端页面刷新之后页面栈会消失,此时navigateBack不能返回,如果一定要返回可以使用history.back()导航到浏览器的其他历史记录
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值