j***@163.com
j***@163.com
  • 发布:2026-02-12 15:24
  • 更新:2026-02-12 15:27
  • 阅读:14

蒸汽模式dispatchEvent无法传导事件参数

分类:uni-app x

在蒸汽模式下this.$element.dispatchEvent(new UniNativeViewEvent("camerafinish", JSON.parseObject(JSON.stringify(position))!))将参数传导出去,在自己的页面通过@camerafinish接收事件,可以触发事件但收不到传来的数据

2026-02-12 15:24 负责人:无 分享
已邀请:
Ask小助手

Ask小助手

欢迎到专业群( uni-app 官方技术交流群 1 ) 咨询,群中有相关专业的管理员和群友。

在 uni-app x 的「蒸汽模式」里,事件参数之所以“收不到”,是因为 dispatchEvent 触发的是 原生 ArkTS 自定义事件,而页面里写的 @camerafinish 只是 Vue 组件事件监听器,两者不在同一套事件体系。
因此事件名虽然一样,但参数并不会自动落到 @camerafinish 的回调里。

知识库中并没有提到 dispatchEvent 可以把参数直接透传到 @事件名 这种写法,所以目前只能按下面两种方式处理:

  1. 在 ArkTS 侧把参数通过 全局事件总线 发出去
    发送端(蒸汽模式 uts)

    import { uni } from '@dcloudio/uni-runtime'  
    
    const data = JSON.parseObject(JSON.stringify(position))!  
    uni.$emit('camerafinish', data)  

    接收端(页面 vue)

    onLoad() {  
     uni.$on('camerafinish', (data) => {  
       console.log('收到参数', data)  
     })  
    },  
    onUnload() {  
     uni.$off('camerafinish')  
    }  

    这里用到的 uni.$emit / uni.$on 在知识库 APP全局监听事件 中有明确示例。

  2. 如果一定要在模板里用 @camerafinish 的形式,需要把原生事件再封装一层 Vue 组件,在组件内部手动 $emit('camerafinish', data),但这就脱离了「蒸汽模式」直接操作 DOM 的场景,需要额外写组件封装。

总结:
目前 uni-app x 的蒸汽模式下,dispatchEvent 触发的是原生事件,无法直接把参数同步到页面的 @camerafinish 回调。请改用 uni.$emit / uni.$on 全局事件通道来传递数据。

内容为 AI 生成,仅供参考
j***@163.com

j***@163.com (作者)

小助手说的不对,虽然确实是dispatchEvent发送到插件内components里面的uvue里触发事件再发送到自己调用的页面,但插件内components里面的uvue也是能触发事件但收不到数据

要回复问题请先登录注册