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

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

阅读 515
1 个回答

页面跳转传值类型为自定义数据类型时出现闪退的问题,可能是由于以下几个原因导致的:
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 
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进