HarmonyOS鸿蒙Next中使用this.pageInfo.pushDestinationByName跳转页面的必备前置条件有哪些?

HarmonyOS鸿蒙Next中使用this.pageInfo.pushDestinationByName跳转页面的必备前置条件有哪些? 比如 在module.json5里配置routerMap,实现buildFunction,除此之外还有哪些不能缺少的配置?

7 回复

开发者你好, 可以参考navigation示例3(设置可交互转场动画).

主要有三点:

  1. 子页面和父页面用同一个NavPathStack, 主页面使用 pageInfos: NavPathStack = new NavPathStack(); 初始化页面之后, 子页面通过onReady获取主页面的NavPathStack
    .onReady((context: NavDestinationContext) => {
      this.pageInfos = context.pathStack;
      if (context.navDestinationId) {
        this.pageId = context.navDestinationId;
        this.registerCallback();
      }
    })
  1. 在src/main目录下的module.json5配置文件中的module字段里配置"routerMap": “$profile:router_map”,并在src/main/resources/base/profile目录下新增router_map.json。router_map.json示例如下。
{
  "routerMap": [
    {
      "name": "pageOne",
      "pageSourceFile": "src/main/ets/pages/PageOne.ets",
      "buildFunction": "PageOneBuilder",
      "data": {
        "description": "this is pageOne"
      }
    },
    {
      "name": "pageTwo",
      "pageSourceFile": "src/main/ets/pages/PageTwo.ets",
      "buildFunction": "PageTwoBuilder"
    }
  ]
}
  1. 导出子页面的构造函数
@Builder
export function PageOneBuilder

更多关于HarmonyOS鸿蒙Next中使用this.pageInfo.pushDestinationByName跳转页面的必备前置条件有哪些?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


  1. module.json5 配置 routerMap
  2. router_map.json 定义页面映射
  3. 目标页面 导出 Builder 函数
  4. 目标页面 使用 @Consume('pageInfo')
  5. 父页面 创建 NavPathStack 实例
  6. 父页面 配置 Navigation 组件
  7. 所有页面 使用同一个 NavPathStack 实例
  8. 正确传递参数 通过 pushDestinationByName 的第二个参数

是的

1楼正解

在HarmonyOS Next中使用this.pageInfo.pushDestinationByName进行页面跳转,需满足以下前置条件:

  1. 目标页面已在module.json5文件的pages路由表中正确定义。
  2. 目标页面的路径已通过router.Destination接口在EntryAbility中完成注册。
  3. 调用该方法的上下文(this)必须是一个有效的Page页面组件实例,确保pageInfo对象可用。
  4. 确保UIAbility上下文环境已正确初始化。

在HarmonyOS Next中,使用 this.pageInfo.pushDestinationByName 进行页面跳转,除了你提到的配置外,以下条件是必须满足的:

  1. 页面路由声明:在目标页面的 @Component 装饰器中,必须声明 route 属性,其值需与 module.json5routerMap 配置的 name 一致。

    @Component({ route: 'TargetPage' })
    export struct TargetPage {
      // 页面内容
    }
    
  2. routerMap 配置:在 module.json5 文件的 abilitiespages 节点下,正确配置 routerMapname 用于 pushDestinationByName 调用,pageSourceFile 指定页面文件路径。

    "routerMap": [
      {
        "name": "TargetPage",
        "pageSourceFile": "pages/TargetPage"
      }
    ]
    
  3. 页面栈上下文this.pageInfo 必须在有效的页面栈上下文中使用,通常意味着调用代码需在 @Entry 装饰的页面组件内,或能通过其他方式获取到当前页面的 pageInfo 对象。

  4. 模块依赖:确保项目已正确导入 @kit.ArkUI 等相关模块,以便使用 pageInfo 等API。

缺少以上任一条件,pushDestinationByName 跳转都将无法成功执行。

回到顶部