在蒸汽模式下this.$element.dispatchEvent(new UniNativeViewEvent("camerafinish", JSON.parseObject(JSON.stringify(position))!))将参数传导出去,在自己的页面通过@camerafinish接收事件,可以触发事件但收不到传来的数据
- 发布:2026-02-12 15:24
- 更新:2026-02-12 15:27
- 阅读:14
欢迎到专业群( uni-app 官方技术交流群 1 ) 咨询,群中有相关专业的管理员和群友。
在 uni-app x 的「蒸汽模式」里,事件参数之所以“收不到”,是因为 dispatchEvent 触发的是 原生 ArkTS 自定义事件,而页面里写的 @camerafinish 只是 Vue 组件事件监听器,两者不在同一套事件体系。
因此事件名虽然一样,但参数并不会自动落到 @camerafinish 的回调里。
知识库中并没有提到 dispatchEvent 可以把参数直接透传到 @事件名 这种写法,所以目前只能按下面两种方式处理:
-
在 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全局监听事件 中有明确示例。 -
如果一定要在模板里用
@camerafinish的形式,需要把原生事件再封装一层 Vue 组件,在组件内部手动$emit('camerafinish', data),但这就脱离了「蒸汽模式」直接操作 DOM 的场景,需要额外写组件封装。
总结:
目前 uni-app x 的蒸汽模式下,dispatchEvent 触发的是原生事件,无法直接把参数同步到页面的 @camerafinish 回调。请改用 uni.$emit / uni.$on 全局事件通道来传递数据。
j***@163.com (作者)
小助手说的不对,虽然确实是dispatchEvent发送到插件内components里面的uvue里触发事件再发送到自己调用的页面,但插件内components里面的uvue也是能触发事件但收不到数据