页面间的通信在各种项目中都是很常见的功能,在小程序中如何在不同页面中使用组件间通信,
其实很简单,懒得看我叨叨的可以直接查看 🔗 官方的DEMO
首先我们需要通过 wx.navigateTo 打开下一个页面,然后看你需要做怎么样的功能,
如果是想下一个页面传递数据,那么简单的几个参数你可以
query的形式拼接在url上,
然后在 被打开的页面中 的onLoad中接受option中接收query数据如果需要传递复杂的数据,那么可以在
success回调中执行eventChannel.emit()向打开的页面传递。
然后在 被打开的页面中 的中使用this.getOpenerEventChannel()方法来获得一个EventChannel对象,通过该对象的on方法获取上一页面通过eventChannel传送到当前页面的数据
具体示例如下:
// Opener
wx.navigateTo({
url: 'test?id=1', // 增加query参数
success: function(e) {
// 通过eventChannel向被打开页面传送数据
// 这个 acceptDataFromOpenerPage 事件名可以自定义
e.eventChannel.emit('acceptDataFromOpenerPage', { data: 'test' })
}
})
// Opened
Page({
onLoad: function(option){
console.log(option.query) // 接收上一级页面传递的query参数
const eventChannel = this.getOpenerEventChannel()
// 监听 Opener 页面 emit 的时间名称 "acceptDataFromOpenerPage" 事件,
// 来获取上一页面通过eventChannel传送到当前页面的数据
eventChannel.on('acceptDataFromOpenerPage', function(data) {
console.log(data)
// log => { data: 'text' }
})
}
})
如果想要从 被打开的页面(Opened) 向 上一页(Opener) 传递数据,和 接受 上一页 传递过来的参数 一样使用 this.getOpenerEventChannel() 方法来获得一个 EventChannel 对象,然后通过emit 事件向上一页提交数据。
然后再上一页的 wx.navigateTo 方法中的 events 属性中添加一个监听器,获取被打开页面传送到当前页面的数据。
具体示例如下:
// Opener
wx.navigateTo({
events: {
// 为指定事件添加一个监听器,获取被打开页面传送到当前页面的数据
acceptDataFromOpenedPage: function(data) {
console.log(data)
// log => { data: 'text' }
},
someEvent: function(data) {
console.log(data)
// log => { data: 'text' }
}
...
},
})
// Opened
Page({
onLoad: function(){
const eventChannel = this.getOpenerEventChannel()
eventChannel.emit('acceptDataFromOpenedPage', {data: 'test'});
eventChannel.emit('someEvent', {data: 'test'});
}
})
其实就那么简单
如果一个页面由另一个页面通过
wx.navigateTo打开,这两个页面间将建立一条数据通道:
- 被打开的页面可以通过
this.getOpenerEventChannel()方法来获得一个EventChannel对象wx.navigateTo的success回调中也包含一个EventChannel对象。这两个
EventChannel对象间可以使用emit和on方法相互发送、监听事件。
并且被打开的页面中 this.getOpenerEventChannel() 方法,可以在 生命周期 中使用,也可以在 自定义函数 中使用,并不是一定要在生命周期中使用这个方法。
P.S. 如果不是通过 wx.navigateTo 打开的页面是是没办法和上级页面通信的,这个需要稍微注意一下,比如说在开发过程中,直接编译了当前页,而不是从上级页面进入会报错。
文档
Page(Object object) #页面间通信 | 微信开放文档
wx.navigateTo(Object object) | 微信开放文档