HarmonyOS 鸿蒙Next emitter发射携带数据类型有限制吗?

发布于 1周前 作者 caililin 来自 鸿蒙OS

HarmonyOS 鸿蒙Next emitter发射携带数据类型有限制吗?

emitter发射数据,on监听时获取的EventData.data一直是undified,修改为发射字符串可以正常监听 发射的数据类型如下

export class DialogModel {
  titleContent: string | Resource | undefined = undefined
  messageContent: string | Resource | undefined = undefined
  positiveButtonText: string | Resource | undefined = undefined
  negativeButtonText: string | Resource | undefined = undefined
  positiveClickCallback: () => void = this.onClick
  negativeClickCallback: () => void = this.onClick
   
  onClick() {}
}

更多关于HarmonyOS 鸿蒙Next emitter发射携带数据类型有限制吗?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

3 回复

positiveClickCallback: () => void = () => { }

negativeClickCallback: () => void = () => { }

您代码里面这俩闭包的属性导致传值失败。建议您用属性驱动方法,而不是传方法。

将业务封到组件内统一管理。

import { emitter } from '@kit.BasicServicesKit'
@Component
export default struct DemoPage {
  build() {
    Stack({ alignContent: Alignment.Top }) {
      Column().width("100%").height(200).backgroundColor('#7A6CF7')
      DialogContainer()
    }.backgroundColor("#F5F5F5")
  }
  aboutToAppear(): void {
    setTimeout(() => {
      let model2 = new DialogModel()
      model2.titleContent = "标题"
      model2.messageContent = "文案2"
      model2.positiveButtonText = "确定"
      // model2.positiveClickCallback = () => {
      //   console.debug("弹窗关闭")
      // }
      model2.negativeButtonText = "取消"
      showDialog(model2)
      let model3 = new DialogModel()
      model3.titleContent = "标题"
      model3.messageContent = "文案3"
      model3.positiveButtonText = "确定"
      // model3.positiveClickCallback = () => {
      //   console.debug("弹窗关闭")
      // }
      model3.negativeButtonText = "取消"
      showDialog(model3)
    }, 300)
  }
}
export class DialogModel {
  titleContent: string | Resource | undefined = undefined
  messageContent: string | Resource | undefined = undefined
  positiveButtonText: string | Resource | undefined = undefined
  negativeButtonText: string | Resource | undefined = undefined
  positiveClickEnable: boolean = false
  negativeClickEnable: boolean = false
}
@Component
struct DialogContainer {
  build() {
  }
  aboutToAppear(): void {
    let innerEvent: emitter.InnerEvent = {
      eventId: 100
    }
    emitter.on(innerEvent, (event: emitter.EventData) => {
      let data = event.data as DialogModel
      if (data.positiveClickEnable) {
        //根据传入的属性做业务,将业务封到组建内
        console.log('positiveClickEnable')
      }
      if (data.negativeClickEnable) {
        //根据传入的属性做业务,将业务封到组建内
        console.log('negativeClickEnable')
      }
    })
  }
}
function showDialog(dialog: DialogModel) {
  let innerEvent: emitter.InnerEvent = {
    eventId: 100
  }
  emitter.emit(innerEvent, {
    data: {
      "dialog": dialog
    }
  })
}

更多关于HarmonyOS 鸿蒙Next emitter发射携带数据类型有限制吗?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


我也是按照你的做法实现,事件也触发了,但数据为什么没传递过来,我是在模拟器中运行,

在HarmonyOS(鸿蒙)系统中,关于Next emitter发射携带数据类型是否有限制的问题,答案主要取决于鸿蒙系统内部对消息传递和数据序列化的机制设计。

鸿蒙系统作为一个先进的操作系统,其消息传递机制通常支持多种数据类型,包括但不限于基本数据类型(如整数、浮点数)、字符串、结构体以及复杂对象等。然而,具体能够携带的数据类型及其大小限制,可能受到系统实现、内存管理、序列化协议以及安全策略等多种因素的影响。

在大多数情况下,鸿蒙系统会提供一套标准的序列化机制,用于将复杂对象转换为可传输的格式。这种机制通常会限制数据的大小,以确保系统的稳定性和性能。此外,不同的应用或服务之间可能还有特定的数据格式和协议要求。

因此,在HarmonyOS中,Next emitter发射携带的数据类型确实可能存在一定的限制。开发者需要参考鸿蒙系统的官方文档或API指南,以了解具体的限制和要求。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部