HarmonyOS 页面跳转传值类型为自定义数据类型时闪退,如何正确页面跳转传值类型为自定义数据类型?

HarmonyOS
8h前
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
Excelsior_abit

页面跳转传值类型为自定义数据类型时出现闪退的问题,可能是由于以下几个原因导致的:

1.数据类型不支持:router传的对象是一个代理对象,会丢失源对象原型。目前不支持类中传递方法。因此,如果自定义数据类型是一个函数,就会导致闪退。

2.参数传递方式:默认情况下,页面跳转时传递的参数是通过URL进行传递的。如果自定义数据类型不支持通过URL传递,就会导致数据无法正确传递,从而导致闪退。

为了正确传递自定义数据类型,可以考虑以下几种方法:

1.使用JSON格式:将自定义数据类型转换为JSON格式,然后通过URL参数传递。在目标页面接收参数后,再将JSON数据解析为自定义数据类型。

2.使用全局变量:在跳转时,将自定义数据类型作为全局变量传递。在目标页面通过全局变量获取传递的数据。

3.使用事件传递:如果是在同一个页面内的跳转,可以使用事件传递数据。在跳转时,将自定义数据类型作为事件参数传递,在目标页面通过事件回调获取数据。通过以上方法,可以确保自定义数据类型在页面跳转时正确传递,避免闪退问题。

页面1传递数据

export class RouteParams {
  constructor(key1?: string, key2?: string) {
    this.key1 = key1;
    this.key2 = key2;
  }
  // 这里是要传递的两个参数
  public key1?: string;
  public key2?: string;

  // 这里将参数做拷贝
  public copy(oldParams?: RouteParams) {
    this.key1 = oldParams?.key1;
    this.key2 = oldParams?.key2;
  }
  // 测试方法
  public doTest() {
    console.log('doTest', key1: ${this.key1});
  }
}
Text(this.message)
  .fontSize(50)
  .fontWeight(FontWeight.Bold)
  .onClick(() => {
    let routeParams = new RouteParams('value1', 'value2'); // 将对象通过router传递过去
    router.pushUrl({
      url: "pages/Page20",
      params: routeParams
    })
  })

页面2:接收数据

onPageShow(): void {
  // 这里第二个界面接收参数,注意 接收的实际是一个代理对象,会丢失方法
  let params = router.getParams() as RouteParams | undefined;
  console.info('aboutToAppear: ' + JSON.stringify(params));
  // 这里重新创建一个对象,然后拷贝数据
  let newRouteParams = new RouteParams();
  newRouteParams.copy(params);
  newRouteParams.doTest(); // 这里提示undefined
}
分享
微博
QQ
微信
回复
6h前
相关问题
MongoDB支持哪些数据类型
3373浏览 • 1回复 待解决
mysql数据类型使用int类型和string类型
2625浏览 • 1回复 待解决
ArkTS自定义组件如何父子间
393浏览 • 1回复 待解决
Redis数据类型列表list是什么?
3369浏览 • 1回复 待解决
自定义组件的和绑定
942浏览 • 1回复 待解决
Redis五种数据类型是什么?
3600浏览 • 1回复 待解决
HarmonyOS 播放条支持自定义多种类型
322浏览 • 1回复 待解决
Redis数据类型集合sets是什么?
2887浏览 • 1回复 待解决
Socket连接中支持发送哪些数据类型
1689浏览 • 1回复 待解决
arkts中不支持bigint数据类型
2033浏览 • 1回复 待解决
Redis数据类型散列hash是什么?
2675浏览 • 1回复 待解决
HarmonyOS 页面反向怎么
102浏览 • 1回复 待解决