鸿蒙Next ArkTS中router.getParams()如何正确取值

在鸿蒙Next开发中,使用ArkTS的router.getParams()获取路由参数时遇到问题。
通过router.pushUrl跳转页面后,在目标页面调用router.getParams()获取到的参数始终为undefined。
已确认传参格式正确:router.pushUrl({url: 'pages/Detail', params: {id: 123}}),但接收端仍无法取值。
请问是否需要额外配置路由?或是存在其他注意事项?
(开发环境:API 9+,DevEco Studio最新版)

2 回复

在鸿蒙Next的ArkTS中,使用router.getParams()获取页面参数时,需要注意以下几点:

  1. 页面跳转时传参

    router.pushUrl({
      url: 'pages/DetailPage',
      params: { id: 123, name: 'test' }
    })
    
  2. 目标页面接收参数

    import router from '[@ohos](/user/ohos).router'
    
    [@Entry](/user/Entry)
    [@Component](/user/Component)
    struct DetailPage {
      private id: number = 0
      private name: string = ''
      
      onPageShow() {
        const params = router.getParams() as Record<string, Object>
        this.id = params['id'] as number
        this.name = params['name'] as string
      }
    }
    
  3. 注意事项

    • 建议在onPageShow()生命周期中获取参数
    • 使用类型断言确保类型安全
    • 参数通过键值对形式传递和接收
    • 确保参数键名与传递时一致
  4. 参数验证

    const params = router.getParams()
    if (params && params['id']) {
      // 处理参数
    }
    

这样就能正确获取到传递的参数值了。

更多关于鸿蒙Next ArkTS中router.getParams()如何正确取值的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在鸿蒙Next的ArkTS中,使用router.getParams()获取页面路由参数时,需要注意以下几点以确保正确取值:

1. 基本用法

在目标页面的onPageShow()或自定义方法中调用:

import router from '@ohos.router';

onPageShow() {
  let params = router.getParams(); // 获取传递的参数对象
  if (params) {
    let id = params['id'] as string; // 读取具体参数(需类型断言)
    console.log('接收到的参数:', id);
  }
}

2. 关键注意事项

  • 参数类型getParams()返回Object类型,需通过键名访问并手动断言类型(如as string
  • 时机选择:建议在onPageShow()生命周期中获取,确保路由已完成参数传递
  • 空值处理:始终检查返回值是否为空,避免未传参时访问属性报错

3. 传递参数示例

发起页面传递参数:

router.pushUrl({
  url: 'pages/TargetPage',
  params: { id: '123', name: 'ArkTS' } // 定义参数对象
})

4. 完整示例

// 目标页面
@Entry
@Component
struct TargetPage {
  @State message: string = '';

  onPageShow() {
    let params = router.getParams();
    if (params && params['id']) {
      this.message = params['id'] as string;
    }
  }

  build() {
    Text(this.message).fontSize(20)
  }
}

常见问题

  • 若获取到undefined:检查传递参数的键名是否一致,或尝试在onPageShow()中添加延时操作
  • 类型错误:使用as进行类型断言,或通过String(params['id'])转换

通过规范的类型断言和生命周期管理,可确保参数正确获取。

回到顶部