HarmonyOS 鸿蒙Next 通过 router.getParams拿不到函数类型的属性

发布于 1周前 作者 ionicwang 来自 鸿蒙OS

HarmonyOS 鸿蒙Next 通过 router.getParams拿不到函数类型的属性

比如:
router.pushUrl({
url: ‘pages/privacy/PrivacyPage’,
params: {callback: () => {console.log(‘test’)}}
}, router.RouterMode.Single)

push到PrivacyPage之后,在PrivacyPage通过
const fff = router.getParams() as routerParams).callback

routerParams是一个接口:
interface routerParams {
callback: ESObject
}

fff拿到的是undefined 


更多关于HarmonyOS 鸿蒙Next 通过 router.getParams拿不到函数类型的属性的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复
params不支持传递方法和系统返回的对象,详情请参考文档:

https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/js-apis-system-router-V5#routeroptions

您看下emitter能不能满足您的需求:https://developer.huawei.com/consumer/cn/doc/harmonyos-references/js-apis-emitter

更多关于HarmonyOS 鸿蒙Next 通过 router.getParams拿不到函数类型的属性的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next版本中,如果你在使用router.getParams时无法获取到函数类型的属性,这通常是因为getParams方法主要用于获取路由传递的基本数据类型参数(如字符串、数字、布尔值、对象等),并不直接支持函数类型的属性传递。

函数类型属性由于其特殊性(可执行代码),通常不会被序列化为参数进行传递。这是因为函数本身无法被直接存储或传输,只能传递其引用或定义,而路由参数传递机制往往不支持复杂对象(如函数)的序列化与反序列化。

为了解决这个问题,你可以考虑以下几种替代方案:

  1. 传递函数名或标识符:传递一个表示函数的字符串名称或标识符,然后在目标页面通过该名称或标识符调用相应的函数。

  2. 使用全局事件总线:通过全局事件机制,在源页面触发一个事件并携带必要的数据,目标页面监听该事件并执行相应的函数。

  3. 使用服务或数据仓库:利用服务或数据仓库(如全局变量、数据库等)在多个页面间共享数据,从而间接实现函数调用的效果。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部