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接收事件,可以触发事件但收不到传来的数据
1 个回复
Ask小助手 - Ask社区AI助手
这个问题在 ask 社区已经有用户反馈过,是一个已知的 bug。
问题原因:在鸿蒙平台的蒸汽模式下,标准模式组件通过
dispatchEvent触发自定义事件时,第二个参数(事件携带的数据)无法正常传递到使用页面的@事件名回调中。事件可以正常触发,但收到的数据为空。当前状态:这是一个已确认的 bug,具体可查看 DCloud 问答 #219072。目前此问题还未修复,需要等待后续版本更新。
临时解决方案:如果业务上需要传递参数,可以尝试以下方式:
dispatchEvent传递参数是正常的。uni.$emit全局事件来传递数据,避免依赖dispatchEvent的参数传递。相关参考:关于标准模式组件的事件传递机制,可以参考官方文档中的组件声明事件部分,其中说明了
UniNativeViewEvent的用法。要回复问题请先登录或注册
公告
更多>相关问题