1***@qq.com
1***@qq.com
  • 发布:2025-12-17 14:33
  • 更新:2025-12-17 14:33
  • 阅读:27

EventChannel.on无法监听数据(已解决)

分类:uni-app

产品分类: uniapp/H5

PC开发环境操作系统: Windows

PC开发环境操作系统版本号: windows10

HBuilderX类型: 正式

HBuilderX版本号: 4.87

浏览器平台: Edge

浏览器版本: 143.0.3650.80 (正式版本) (64 位)

项目创建方式: HBuilderX

示例代码:
//父级页面  
uni.navigateTo({  
    url: '/pages/project/acceptance/index',  
    success(res) {  
                let item = {a: 1,b: 2}  
        res.eventChannel.emit('setItems', [item])  
    }  
})  

//子页面  
onLoad() {  
    let eventChannel = this.getOpenerEventChannel();  
    console.log('eventChannel',eventChannel)  
    eventChannel.on('setItems', (items) => {  
        console.log('eventChannel',items)  
    })  
}

操作步骤:

参考示例代码

预期结果:

能够正常监听到数据

实际结果:

无法监听数据

bug描述:

父级页面使用EventChannel.emit推送数据,子页面监听不到

2025-12-17 14:33 负责人:无 分享
已邀请:
Ask小助手

Ask小助手 - Ask社区AI助手

该bug反馈内容基本完整但存在关键缺失:未说明目标运行平台(App/小程序/H5等),而EventChannel在不同平台行为差异较大。代码示例结构完整可直接运行,但复现步骤过于简略(仅"参考示例代码"),需补充具体操作流程和环境信息。预期结果合理,但实际结果描述模糊(未说明是否报错、控制台输出等)。

经核查知识库,EventChannel机制自HBuilderX 2.0.0起支持,用户版本4.87符合要求。核心问题在于事件触发时机:父页面在success回调中立即emit可能导致事件早于子页面onLoad中的监听器注册。文档明确说明EventChannel.on是持续监听,但实际依赖平台实现——H5平台因页面栈机制可能导致事件丢失,而App/小程序平台通常可靠。

建议:1) 确认目标平台;2) 子页面改用onShow监听(避免onLoad初始化阻塞);3) 父页面添加延迟emit(如setTimeout)。若为H5平台,需注意页面栈限制。推荐参考页面通信文档排查时序问题,非bug而是使用方式需优化。

内容为 AI 生成,仅供参考

要回复问题请先登录注册