鸿蒙开发中,在页面跳转时,用router.getParams()获取传递的参数后,参数中带入的Map类型数据,全部变成了Object类型,请问有什么方法可以解决这种问题?(不通过判断特定的key类型解决)?
本文参与了 【 HarmonyOS NEXT 技术问答冲榜,等你来战!】欢迎正在阅读的你也加入。
鸿蒙开发中,在页面跳转时,用router.getParams()获取传递的参数后,参数中带入的Map类型数据,全部变成了Object类型,请问有什么方法可以解决这种问题?(不通过判断特定的key类型解决)?
本文参与了 【 HarmonyOS NEXT 技术问答冲榜,等你来战!】欢迎正在阅读的你也加入。
在鸿蒙开发中,如果在页面跳转时通过 `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 类型的问题。
目前params参数不能传递方法和系统接口返回的对象(例如,媒体接口定义和返回的PixelMap对象)。
自行构造object类型对象进行传递或者可以考虑下appstorage这种方式传递:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides...
也可以考虑用Record代替Map类型。
本文参与了 【 HarmonyOS NEXT 技术问答冲榜,等你来战!】欢迎正在阅读的你也加入。