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

HarmonyOS
2024-12-18 15:45:13
786浏览
收藏 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
    })
  })
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.

页面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
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
分享
微博
QQ
微信
回复
2024-12-18 18:05:09


相关问题
HarmonyOS 数据类型-PurchaseOrderPayload
739浏览 • 1回复 待解决
mysql数据类型使用int类型和string类型
3475浏览 • 1回复 待解决
MongoDB支持哪些数据类型
4316浏览 • 1回复 待解决
ArkTS自定义组件如何父子间
1396浏览 • 1回复 待解决
自定义组件的和绑定
1691浏览 • 1回复 待解决
Redis数据类型列表list是什么?
4136浏览 • 1回复 待解决
HarmonyOS 如何判断自定义类的类型
785浏览 • 1回复 待解决
Redis五种数据类型是什么?
4528浏览 • 1回复 待解决
Redis数据类型集合sets是什么?
3758浏览 • 1回复 待解决
HarmonyOS 播放条支持自定义多种类型
693浏览 • 1回复 待解决
Redis数据类型散列hash是什么?
3654浏览 • 1回复 待解决
arkts中不支持bigint数据类型
3082浏览 • 1回复 待解决
Socket连接中支持发送哪些数据类型
2405浏览 • 1回复 待解决