HarmonyOS 鸿蒙Next中ESObject使用问题

HarmonyOS 鸿蒙Next中ESObject使用问题

如下图, 这个 args 有数据 image.png

但是, 我就是取不出来值, 因为我是flutter开发, 刚刚接触鸿蒙开发不久。

所以, 想请教一下, 这个怎么才能取出里面的值, 我也问了AI, 网上也找了, 各种方法都尝试了, 取出来都是 undefined

image.png

截图里只是一种尝试, 我尝试过很多了。


更多关于HarmonyOS 鸿蒙Next中ESObject使用问题的实战教程也可以访问 https://www.itying.com/category-93-b0.html

5 回复
args 是个Map类型,取值使用 `args.get('apiKey')`

更多关于HarmonyOS 鸿蒙Next中ESObject使用问题的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


const b = args as Record<string, object>;
const apiKey = b["apiKey"]

ESObject类型 官方建议不要使用,应该使用明确类型的强类型,所以建议你进行改造

关键这个是 Flutter框架适配鸿蒙搞的, 我也改不了。

const apiKey = b["apiKey"]```

这种写法我也尝试了, 取出来也是 undefined,

在鸿蒙Next中,ESObject是用于实现JS与Native交互的关键对象。它提供JS对象到Native对象的映射能力,主要接口包括:

  1. getNativeObject()获取关联的Native对象;
  2. setNativeObject()绑定Native对象;
  3. hasNativeObject()检查对象绑定状态。

典型使用场景为在ArkUI的JS模块调用Native能力时进行对象转换。注意需保持JS与Native对象的生命周期同步,避免内存泄漏。当JS对象被回收时,需主动解绑Native对象。

从截图来看,你正在处理ESObject类型的数据。在HarmonyOS中,ESObject是ArkUI与Native交互时使用的通用对象类型。针对你的问题,建议这样处理:

  1. 首先确认args确实包含有效数据,可以通过console.log(args)打印完整对象结构。

  2. 正确的取值方式应该是:

// 方法1:直接通过属性名获取
let name = args.name; 

// 方法2:使用`getProperty`方法
let name = args.getProperty('name');
  1. 如果值是嵌套对象,需要逐层获取:
let innerObj = args.getProperty('innerObj');
let value = innerObj.getProperty('key');
  1. 对于数组类型,使用getElement方法:
let arr = args.getProperty('array');
let firstItem = arr.getElement(0);

注意检查属性名是否正确,包括大小写。如果问题依旧,建议在获取值前先调用hasProperty检查属性是否存在。

回到顶部