2***@qq.com
2***@qq.com
  • 发布:2026-06-16 11:20
  • 更新:2026-06-16 11:20
  • 阅读:20

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

分类:uni-app x

    private name : string | null = null    
    private $element : UniNativeViewElement;    
    private builder : BuilderNode<[NativeAmapOptions]> | null = null    
    // 初始化 buildButton 默认参数    
    private params : NativeAmapOptions = {    
        id: '',    
        // appKey: '',    
        showLocation: false,    
        owerIcon: '',    
        // name: '',    
        onReady: () => {    
            this.$element.dispatchEvent(new UniNativeViewEvent("isready", {}))    
        },    
        onMapClick: (point) => {    
            this.$element.dispatchEvent(new UniNativeViewEvent("mapclick", JSON.parseObject(JSON.stringify(point))!))    
        },    
        onCameraChange: (position) => {    
            this.$element.dispatchEvent(new UniNativeViewEvent("camerachange", JSON.parseObject(JSON.stringify(position))!))    
        },    
        onCameraChangeFinish: (position) => {    
            this.$element.dispatchEvent(new UniNativeViewEvent("camerafinish", JSON.parseObject(JSON.stringify(position))!))    
        },    
        onMarkerClick: (markerId) => {    
            let result = {    
                markerId: markerId    
            }    
            this.$element.dispatchEvent(new UniNativeViewEvent("markertap", JSON.parseObject(JSON.stringify(result))!))    
        }    
        // onClick: () => {    
        //  this.$element.dispatchEvent(new UniNativeViewEvent("customClick", {}))    
        // }    
    }    
    constructor(element : UniNativeViewElement) {    
        // 绑定 wrapBuilder 函数    
        this.builder = element.bindHarmonyWrappedBuilder(wrapBuilder<[NativeAmapOptions]>(buildAmap), this.params)    
        this.$element = element    
        // 绑定当前实例为自定义的controller,方便其他地方通过 element 获取使用    
        this.$element.bindHarmonyController(this)    
    }    
}```  

操作步骤:
在按照文档编写标准模式组件,在调用this.$element.dispatchEvent(new UniNativeViewEvent("mapclick", JSON.parseObject(JSON.stringify(point))!))中JSON.parseObject(JSON.stringify(point))!)是非空的

预期结果:
在自己的页面外部调用@mapclick时候可以像非蒸汽模式下正常收到数据

实际结果:
在自己的页面调用该标准模式组件中的@mapclick事件,能够正常触发,但收不到内容

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

2026-06-16 11:20 负责人:无 分享
已邀请:
Ask小助手

Ask小助手 - Ask社区AI助手

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

这个问题在 ask 社区已经有用户反馈过,是一个已知的 bug。

问题原因:在鸿蒙平台的蒸汽模式下,标准模式组件通过 dispatchEvent 触发自定义事件时,第二个参数(事件携带的数据)无法正常传递到使用页面的 @事件名 回调中。事件可以正常触发,但收到的数据为空。

当前状态:这是一个已确认的 bug,具体可查看 DCloud 问答 #219072。目前此问题还未修复,需要等待后续版本更新。

临时解决方案:如果业务上需要传递参数,可以尝试以下方式:

  1. 关闭蒸汽模式:在非蒸汽模式下,dispatchEvent 传递参数是正常的。
  2. 通过其他方式传递数据:例如在组件中通过 uni.$emit 全局事件来传递数据,避免依赖 dispatchEvent 的参数传递。

相关参考:关于标准模式组件的事件传递机制,可以参考官方文档中的组件声明事件部分,其中说明了 UniNativeViewEvent 的用法。

内容为 AI 生成,仅供参考

要回复问题请先登录注册