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丢失的问题,这通常是由于在数据分发过程中,实体对象被不当地转换或处理导致的。以下是一些可能的原因及解释:
- 数据序列化与反序列化:在emitter分发过程中,源对象可能被序列化为JSON格式,随后在接收端反序列化。这一过程可能导致源对象的类型信息和自有方法丢失,接收到的仅为普通Object类型。
- 类型安全问题:鸿蒙Next的emitter机制在分发对象时,若未正确处理泛型信息,可能导致类型不匹配,进而造成数据丢失或类型错误。
为解决这一问题,建议检查emitter的API调用方式,确保在分发和接收数据时正确使用了泛型。同时,鸿蒙Next的开发团队也可能需要对此进行优化,以避免在分发过程中对对象进行不必要的序列化。
如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html 。