微信小程序的官方说明文档地址
events 通信接口
events 通讯接口基于微信小程序基础版本v2.7.3,用于当前页面与新打开页面之间进行通讯使用,使用方式
//官方文档的示例
wx.navigateTo({
url: 'test?id=1',
events: {
// 为指定事件添加一个监听器,获取被打开页面传送到当前页面的数据
acceptDataFromOpenedPage: function(data) {
console.log(data)
},
someEvent: function(data) {
console.log(data)
}
...
},
success: function(res) {
// 通过eventChannel向被打开页面传送数据
res.eventChannel.emit('acceptDataFromOpenerPage', { data: 'test' })
}
})
实际场景应用
- 举例场景: 奶茶小程序提交订单需要选择地址界面
- 实现功能:在订单页面点击选择地址跳转地址选择页面,选择后需要保留订单信息且需要显示选择的地址信息。
笨拙方法: 订单页跳转地址选择页面带着订单信息传入到选择页面,选择后再传回订单页面进行处理。缺点: 带参跳转繁琐且对象需要不断转换。回跳使用navigateTo会将页面添加到路由页面栈中,使订单返回页异常,需要特殊处理。新方法实现: 跳转时打开通信通道,进行相互之间通讯,将选择的地址传给订单页面,订单页面进行处理,且进行判断是否可以使用来推送给选择页面结果。通讯确定无误之后使用navigateBack进行返回,不会使订单页返回异常- 实现伪代码
//订单页面跳转选择页面方法
chooseAddress(){
var _this = this;
wx.navigateTo({
url: '/pages/address/address',
events: {
//接受地址传回
acceptAddress: function(address){
//判断地址是否可用 没有相关需求可不写
if(!CanUseAddress(address)){
//不可用传递给选择页面
_this.addressChanel.emit('canUseAddress', false);
return;
}
//对数据进行处理
//...
_this.addressChanel.emit('canUseAddress', true);
},
success: function (res){
_this.addressChanel = res.eventChannel;
}
}
})
}
//地址选择页面
onLoad(e){
const eventChannel = this.getOpenerEventChannel()
eventChannel.on('canUseAddress', function(result) {
if(result){
//可以选择则返回订单页面
wx.navigateBack();
return;
}
//不可以则继续选择
//...
})
},
tapAddressItem(e){
const currAddr = e.currTarget.dataset.item;
//传递给订单页面去判断
const eventChannel = this.getOpenerEventChannel()
eventChannel.emit('acceptAddress', currAddr);
}
除这个方法之外还可以使用 getCurrentPages()方法设置上一个页面的数据,具体可以自行百度
版权声明:本文为qq_34768777原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。