三级目录 微信小程序navigateTo数据传递EventChannel的使用方法
EventChannel:页面间事件通信通道
详细官方文档:https://developers.weixin.qq.com/miniprogram/dev/api/route/EventChannel.html
讲解用到的方法:
EventChannel.emit()触发一个事件
EventChannel.on()持续监听一个事件
父页面到子页面数据传递
这两个方法是页面跳转时,在通道(也就两个页面)的两端作用,emit执行时就会触发,而另一端如果有on就能监听到。可以形象的比喻为两个人打电话,如果一方在说话,另一方没有听,那么就无法传递到数据。
父页面
wx.navigateTo({
url: "../child/child?Data="+ JSON.stringify(Data),
events:{
//注释代码块,这里可暂时不管,后续讲解需要
// myFunction:function(data) { console.log(data) }
},
success: function(res) {
//跳转成功后 触发myFunction,向跳转页面传递数据
res.eventChannel.emit('myFunction',{data:2})
}
})
接收页面:
onLoad: function (options) {
//注释代码块
//const eventChannel = this.getOpenerEventChannel()
//eventChannel.emit('myFunction',{data:0});
// 监听myFunction事件,获取上一页面通过eventChannel传送到当前页面的数据
eventChannel.on('myFunction', function(data) {
console.log(data)
})
}
忽视注释代码,如上述情形就完成了父页面到子页面(被跳转页面)的数据传递。
子页面传递数据到父页面
根据文档框架中页面通信介绍:
如果一个页面由另一个页面通过 wx.navigateTo 打开,这两个页面间将建立一条数据通道:
被打开的页面可以通过 this.getOpenerEventChannel() 方法来获得一个 EventChannel 对象;
wx.navigateTo 的 success 回调中也包含一个 EventChannel 对象。
这两个 EventChannel 对象间可以使用 emit 和 on 方法相互发送、监听事件。
因此,先简化以下代码,以便更清晰理解,将上述代出现的eventChannel.on和eventChannel.emit相关代码注释掉。只看我之前注释掉的代码块。
在子页面触发myFunction方法,并通过参数传递到父页面,由于父页面events里含有myFunction方法,所以父页面可在此出获取到子页面的数据。