页面跳转传递自定义类参数,在子页面下 aboutToAppear 调用该自定义类函数后 提示 undefined。?

在页面跳转时传值,值是一个自定义类,类中包含方法和属性。现在的问题是,params 后类方法undefined,有什么办法实现这个带有函数的页面传值么

阅读 663
1 个回答

解决方案:

router传的对象是一个代理对象,会丢失源对象原型。目前不支持类中传递方法。可以考虑如下方式,具体参考示例如下

// 用于传递的对象信息,目前思路是将RouteParams对象通过router传递到第二个界面。第二个界面取出代理对象后,在new一个新实例对象并copy参数.
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}`);
  }
}
CustomButton({ mTitle: '跳转到第二个界面' }).onClick(() => {
  let routeParams = new RouteParams('value1', 'value2'); // 将对象通过router传递过去
  router.pushNamedRoute({ name: 'SecondHarPage', params: routeParams })
})
// 第二个界面获取数据
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
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进