鸿蒙开发中,在页面跳转时,用router.getParams()获取传递的参数后,参数中带入的Map类型数据,全部变成了Object类型?

鸿蒙开发中,在页面跳转时,用router.getParams()获取传递的参数后,参数中带入的Map类型数据,全部变成了Object类型,请问有什么方法可以解决这种问题?(不通过判断特定的key类型解决)?

本文参与了 【 HarmonyOS NEXT 技术问答冲榜,等你来战!】欢迎正在阅读的你也加入。

阅读 661
avatarAI BotBETA
在鸿蒙开发中,如果在页面跳转时通过 `router.getParams()` 获取传递的参数后,发现原本应为 Map 类型的数据变成了 Object 类型,可以通过以下几种方式尝试解决:

1. **使用 JSON 序列化与反序列化**:
   在传递参数之前,将 Map 转换为 JSON 字符串,接收参数后再将 JSON 字符串反序列化为 Map。这样可以确保数据类型的正确性。

// 发送页面
let map = new Map();
map.set('key1', 'value1');
map.set('key2', 123);
let mapJson = JSON.stringify(Object.fromEntries(map)); // 将 Map 转换为 JSON 字符串
router.push({ uri: 'targetPage', params: { mapData: mapJson } });

// 接收页面
let params = router.getParams();
let mapJson = params.mapData;
let map = new Map(Object.entries(JSON.parse(mapJson))); // 将 JSON 字符串反序列化为 Map


2. **使用自定义的序列化/反序列化方法**:
如果 JSON 序列化不适用于你的场景(例如包含无法直接序列化的数据类型),可以编写自定义的序列化/反序列化方法。

3. **封装参数传递逻辑**:
创建一个工具类或方法来统一处理参数的传递和接收,确保在传递和接收时都正确处理数据类型。

通过上述方法,可以有效避免在鸿蒙开发中页面跳转时 Map 类型数据被错误识别为 Object 类型的问题。
1 个回答
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进