我们在写小程序的时候经常会遇到子页面向主页面回传数据或者普通页面跳转到tabBar 页面携带数据,而现有官网提供的跳转方法多数是不支持参数传递的。
下面写了四种方法大家根据自己的实际场景来选择使用哪种
首先大概讲下小程序各个页面跳转的一些差别和注意事项
wx.navigateTo({
url: 'test?key=value&key2=value2'
})
wx.redirectTo({
url: 'test?key=value&key2=value2'
})
{
"tabBar": {
"list": [{
"pagePath": "index",
"text": "首页"
},{
"pagePath": "other",
"text": "其他"
}]
}
wx.switchTab({
url: '/index'
})
tabBar 最少要有二个菜单
关闭当前页面,返回上一页面或多级页面。可通过 getCurrentPages()
获取当前的页面栈,决定需要返回几层。
wx.navigateBack({
delta: 2
})
delta 参数: 返回的页面数,如果 delta 大于现有页面数,则返回到首页。
const app = getApp();
/**
* 生命周期函数--监听页面显示
*/
onShow: function () {
var country= app.globalData.country;
this.setData({
country: country
})
},
const app = getApp();
app.globalData.country= country;
wx.switchTab({
url: 'index',
})
子页面直接通过页面路径栈找到主页面并设置数据
var pages = getCurrentPages();
var currPage = pages[pages.length - 1]; //当前页面
var prevPage = pages[pages.length - 2]; //上一个页面
//直接调用上一个页面的setData()方法,把数据存到上一个页面中去
prevPage.setData({
country: { id: 1, name: "中国"}
})
微信小程序通知广播模式类,降低小程序开发的耦合度
使用例子
// 引入WxNotificationCenter 工具
const WxNotificationCenter = require("../../utils/WxNotificationCenter.js");
// 回调函数传值
onPickerCountry: function (country) {
this.setData({
country: country
});
},
/**
* 生命周期函数--监听页面加载
*/
onLoad: function (options) {
WxNotificationCenter.addNotification("testNotificationName", this.onPickerCountry, this);
},
// 跳转到子页面
pickerCountry: function(){
wx.navigateTo({
url: 'b',
})
},
// 同样需要先引入WxNotificationCenter
const WxNotificationCenter = require("../../utils/WxNotificationCenter.js");
// 触发事件,回传数据
bindPickerChange: function (e) {
var index = e.detail.value;
var country = this.data.countries[index];
this.setData({ country: country})
console.log('picker发送选择改变,携带值为', index)
console.log('picker发送选择改变,携带值为', country.name)
// 回传数据
WxNotificationCenter.postNotificationName("testNotificationName", country);
},
注意这里面的 testNotificationName 是一个标识,类似click 是点击事件一样,你也可以按照自己的业务或者操作来命名
是一个很简单的事件分发的Javascript库(仅仅 0.9kb),简洁实用。
使用例子
// 引入bonfire 工具
const onfire = require("../../utils/onfire.js");
// 回调函数传值
onPickerCountry: function (country) {
this.setData({
country: country
});
},
/**
* 生命周期函数--监听页面加载
*/
onLoad: function (options) {
var eventObj = onfire.on('eventName', this.onPickerCountry);
},
// 跳转到子页面
pickerCountry: function(){
wx.navigateTo({
url: 'b',
})
},
// 同样需要先引入onfire
const onfire = require("../../utils/onfire.js");
// 触发事件,回传数据
bindPickerChange: function (e) {
var index = e.detail.value;
var country = this.data.countries[index];
this.setData({ country: country})
console.log('picker发送选择改变,携带值为', index)
console.log('picker发送选择改变,携带值为', country.name)
// 回传数据
onfire.fire('eventName', country);
},
注意这里面的 eventName 是一个标识,类似click 是点击事件一样,你也可以按照自己的业务或者操作来命名
更多精彩内容
微信小程序电商实战-入门篇
微信小程序电商实战-首页(上)
微信小程序电商实战-首页(下)
微信小程序电商实战-商品详情(上)
微信小程序电商实战-商品详情加入购物车(下)
微信小程序电商实战-商品列表流式布局
微信小程序实战篇:基于wxcharts.js绘制移动报表
作者:IT实战联盟咖啡
链接:https://www.jianshu.com/p/9ac246fcc5c7
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。