HarmonyOS 鸿蒙Next emitter data丢失
HarmonyOS 鸿蒙Next emitter data丢失
emitter data丢失
        
          2 回复
        
      
      
        目前发送事件时传递的数据,eventdata支持数据类型包括Array、ArrayBuffer、Boolean、DataView、Date、Error、Map、Number、Object、Primitive(除了symbol)、RegExp、Set、String、TypedArray
参考地址:https://developer.huawei.com/consumer/cn/doc/harmonyos-references/js-apis-emitter#emitteron
//Index.ets
import { ChildComponent, Person } from './ChildComponent'
import { emitter } from '@kit.BasicServicesKit';
@Entry
@Component
struct Index {
  aboutToAppear(): void {
    emitter.on({
      eventId: 666,
      priority: emitter.EventPriority.IMMEDIATE
    }, (eventData: emitter.EventData) => {
      let data = eventData?.data
      if (data) {
        let person: Person = data['key'] as Person
        console.log('result private person obj name =>',person?.name)
      }else {
        console.log('result private person => data为空')
      }
    })
  }
  build() {
    Stack({
      alignContent: Alignment.Center
    }) {
      Button('按钮', { type: ButtonType.Normal })
        .size({ width: '90%', height: '90%' })
        .onClick(() => {
          console.info('wendyLog orange button clicked')
        })
        .backgroundColor(Color.Orange)
      ChildComponent()
    }
    .height('100%')
    .width('100%')
    .backgroundColor(Color.Gray)
  }
}
//ChildComponent.ets
import { emitter } from '@kit.BasicServicesKit';
export class Person {
  name?:string;
  age?:number;
  constructor(name?:string, age?:number) {
    this.name = name
    this.age = age
  }
}
@Component
export struct ChildComponent {
  private privatePerson:Person = new Person('小张', 18)
  build() {
    Column(){
      Button('emitter发送数据', { type: ButtonType.Normal })
        .size({ width: '90%', height: 40 })
        .onClick(() => {
          emitter.emit(
            {
              eventId: 666,
              priority: emitter.EventPriority.IMMEDIATE
            },
            {
              data:new Object({'key':this.privatePerson})
            })
        })
        .backgroundColor(Color.Green)
    }
    .size({width:'80%',height:'80%'})
    .backgroundColor(Color.Yellow)
    .justifyContent(FlexAlign.Center)
  }
}
//ChildComponent.ets
import { emitter } from '@kit.BasicServicesKit';
export class Person {
  name?:string;
  age?:number;
  constructor(name?:string, age?:number) {
    this.name = name
    this.age = age
  }
}
@Component
export struct ChildComponent {
  private privatePerson:Person = new Person('小张', 18)
  build() {
    Column(){
      Button('emitter发送数据', { type: ButtonType.Normal })
        .size({ width: '90%', height: 40 })
        .onClick(() => {
          emitter.emit(
            {
              eventId: 666,
              priority: emitter.EventPriority.IMMEDIATE
            },
            {
              data:new Object({'key':this.privatePerson})
            })
        })
        .backgroundColor(Color.Green)
    }
    .size({width:'80%',height:'80%'})
    .backgroundColor(Color.Yellow)
    .justifyContent(FlexAlign.Center)
  }
}
更多关于HarmonyOS 鸿蒙Next emitter data丢失的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
针对HarmonyOS 鸿蒙Next中emitter data丢失的问题,这通常是由于在数据分发过程中,实体对象被不当地转换或处理导致的。以下是一些可能的原因及解释:
- 数据序列化与反序列化:在emitter分发过程中,源对象可能被序列化为JSON格式,随后在接收端反序列化。这一过程可能导致源对象的类型信息和自有方法丢失,接收到的仅为普通Object类型。
 - 类型安全问题:鸿蒙Next的emitter机制在分发对象时,若未正确处理泛型信息,可能导致类型不匹配,进而造成数据丢失或类型错误。
 
为解决这一问题,建议检查emitter的API调用方式,确保在分发和接收数据时正确使用了泛型。同时,鸿蒙Next的开发团队也可能需要对此进行优化,以避免在分发过程中对对象进行不必要的序列化。
如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html 。
        
      
                  
                  
                  
