最近在开发微信小程序,之前总结过一篇关于微信小程序中的用户ID(包括openid和unionid)的一篇文章,大家有兴趣可以去看一下。这次我要总结一下平时经常用的微信小程序中页面跳转和传参的问题。
mpvue页面跳转还是借鉴了微信小程序的页面跳转
目前微信页面跳转有以下几种方式
参数 说明
navigate 对应 wx.navigateTo 或 wx.navigateToMiniProgram 的功能
redirect 对应 wx.redirectTo 的功能
switchTab 对应 wx.switchTab 的功能
reLaunch 对应 wx.reLaunch 的功能
navigateBack 对应 wx.navigateBack 的功能
先说一下主要的区别,然后再一一介绍:
目前小程序的几个页面跳转方式的主要区别就两点:
1.是否可以返回上一个页面
2.目标页面是否是tabBar
两个通用属性:
1.限制:目前页面路径最多只能十层。
2.分类:wx.navigateTo 和 wx.redirectTo不允许跳转到 tabbar 页面,只能用 wx.switchTab 跳转到 tabbar 页面(tabbar页面就是底部导航菜单页面)
下面是对几个跳转方式的整理说明
1.wx.navigateTo({})
保留当前页面,跳转到应用内的某个页面,使用 wx.navigateBack 可以返回;
关于Url参数:
不能跳转到tabBar页面
带参格式:【路径】?【参数键1】=【参数值】& 【参数键2】=【参数值】
wx.navigateTo({
url:'../test/test?id=1&page=4',//跳转页面的路径,可带参数?隔开,不同参数用 & 分隔;相对路径,不需要.wxml后缀
success:function(){} //成功后的回调;
fail:function(){} //失败后的回调;
complete:function(){} //结束后的回调(成功,失败都会执行)
})
传递的参数在接收页面onLoad()函数中得到值:option.id就可以得到了
onLoad: function (option) {
console.log(option)//可以打印一下option看查看参数
this.setData({
id:option.id,
});
那么在mpvue中怎么接受传过来的参数呢
有三种方式:
(1).必须是在onLoad钩子函数往后的生命周期中获取
onShow (options) {
let id = options.id
}
(2)在所有 页面 的组件内可以通过 this.$root.$mp.query 进行获取小程序在 page
onLoad 时候传递的 options。要注意:写在mounted函数里,写到created报错。
(3)在所有的组件内可以通过 this.$root.$mp.appOptions 进行获取小程序在 app
onLaunch/onShow 时候传递的 options。
1.1.wx.navigateBack(data)
关闭当前页面,返回上一页面或多级页面。
可通过 getCurrentPages() 获取当前的页面栈,决定需要返回几层。
关于参数:
data–>类型:Number,
默认值:1 ,
说明:返回的页面数,如果 data 大于现有页面数,则返回到首页。
注意:调用 navigateTo 跳转时,调用该方法的页面会被加入堆栈,而 redirectTo 方法则不会。见下方示例代码
// 此处是A页面
wx.navigateTo({
url: 'B?id=1'
})
// 此处是B页面
wx.navigateTo({
url: 'C?id=1'
})
// 在C页面内 navigateBack,将返回A页面
wx.navigateBack({
delta: 2
})
2.wx.redirectTo({})
关闭当前页面,跳转到非tabBar的某个页面
关于Url参数(同wx.navigateTo({})):
不能跳转到tabBar页面
【路径】?【参数键1】=【参数值】& 【参数键2】=【参数值】
3.wx.reLaunch({})
关闭(之前的页面是回不去的)所有页面,打开到应用内的某个页面。
关于Url参数:
【路径】?【参数键1】=【参数值】& 【参数键2】=【参数值】
【如果是跳转到tabBar页面,则不能带参数】
4.wx.switchTab({})
跳转到tabBar的某个页面,并关闭其他所有非 tabBar 页面
关于参数:
目标页面必须是在:app.json 的 tabBar 中定义的页面
不能带参数
wx.switchTab({
url: '/pages/home/home'
});
5.组件
直接写在布局里面的跳转方式
<navigator url="/pages/detail/detail">点击跳转</navigator>
好了,先简单写到这,以后再举一些例子完善一下。
感谢这篇博客对我的帮助(https://blog.csdn.net/zull_kos_mos/article/details/80595828)