UNI-APP_解决uni-app页面通讯(uni.$emit()、uni.$on())无效的BUG
方法一
嵌套使用页面通讯
login.vue
onUnload() {
uni.$off('need');
},
methods: {
Login: function(id) {
uni.$on('need',()=>{
uni.$emit('login', {
id: id
})
});
}
}
index.vue
onShow() {
uni.$on('login',(res)=>{
console.log(res)
});
uni.$emit('need');
},
onHide() {
uni.$off('login');
}
方法二
// 在起始页面跳转到test.vue页面,并监听test.vue发送过来的事件数据
uni.navigateTo({
url: 'pages/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: 'data from starter page' })
}
})
// 在test.vue页面,向起始页通过事件传递数据
onLoad: function(option) {
const eventChannel = this.getOpenerEventChannel();
eventChannel.emit('acceptDataFromOpenedPage', {data: 'data from test page'});
eventChannel.emit('someEvent', {data: 'data from test page for someEvent'});
// 监听acceptDataFromOpenerPage事件,获取上一页面通过eventChannel传送到当前页面的数据
eventChannel.on('acceptDataFromOpenerPage', function(data) {
console.log(data)
})
}