页面跳转传值类型为自定义数据类型时出现闪退的问题,可能是由于以下几个原因导致的: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 }
页面跳转传值类型为自定义数据类型时出现闪退的问题,可能是由于以下几个原因导致的:
1.数据类型不支持:router传的对象是一个代理对象,会丢失源对象原型。目前不支持类中传递方法。因此,如果自定义数据类型是一个函数,就会导致闪退。
2.参数传递方式:默认情况下,页面跳转时传递的参数是通过URL进行传递的。如果自定义数据类型不支持通过URL传递,就会导致数据无法正确传递,从而导致闪退。
为了正确传递自定义数据类型,可以考虑以下几种方法:
1.使用JSON格式:将自定义数据类型转换为JSON格式,然后通过URL参数传递。在目标页面接收参数后,再将JSON数据解析为自定义数据类型。
2.使用全局变量:在跳转时,将自定义数据类型作为全局变量传递。在目标页面通过全局变量获取传递的数据。
3.使用事件传递:如果是在同一个页面内的跳转,可以使用事件传递数据。在跳转时,将自定义数据类型作为事件参数传递,在目标页面通过事件回调获取数据。通过以上方法,可以确保自定义数据类型在页面跳转时正确传递,避免闪退问题。
页面1传递数据