02Navigation页面路由

在前面的文章中我们介绍了navigation的使用接下来我们体验一下如何使用子页面

在entry页面中创建页面控制器

在子页面我们也需要传入控制器进行页面的操作我们使用provider进行注入

我们获取路由栈的方式有三种甚至更多 可以在下面补充 先使用provider

ts 复制代码
@Entry
@ComponentV2
struct Index {
  // 控制器
@Provider('nav') nav:NavPathStack = new NavPathStack()
  build() {
    Navigation(this.nav) {}
  }
}
创建子页面

为每个NavDestination声明对外的实例化方法,如代码中的helloBuilder,执行该方法会创建一个hello的自定义组件,该组件就是一个Navigation的子页面。

ts 复制代码
@Builder
function helloBuilder(){
  hello()
}

@ComponentV2
export struct hello{
  build() {
    NavDestination(){
      Text("HelloView")
    }
       .title("Hello")
      //  当然NavDestination也支持指定title
  }
}
配置路由表

第一次需要在models.json5配置

json 复制代码
{
  "routerMap": "$profile:router_map"
}

创建文件并且配置如下

src/main/resources/base/profile/router_map.json

json 复制代码
{
  "routerMap": [
    {
      "pageSourceFile": "src/main/ets/pages/hello.ets", // 源码所在路径
      "name": "hello", // 路由页面的唯一标识符
      "buildFunction": "helloBuilder" //页面的实例化方法名称
    }
  ]
}
感受一下跳转

在entry页面加入如下代码会跳转到hello页面

ts 复制代码
Button("to hello").onClick((event: ClickEvent) => {
  this.nav.pushPathByName("hello", null);
});

子页面改造如下

ts 复制代码
@Builder
function helloBuilder(){
  hello()
}

@ComponentV2
export struct hello{
    //获取路由栈控制器
  @Consumer('nav') nav:NavPathStack = new NavPathStack()
  build() {
    NavDestination(){
      Text("HelloView")
      Button('pop')
        .onClick((event: ClickEvent) => {
            // 调用返回栈函数
          this.nav.pop()
      })
    }
  }
}

注意 如果没有传入页面栈控制器子路由则无法返回

相关推荐
飞凌嵌入式3 小时前
飞凌嵌入式RK3506J核心板通过OpenHarmony 5.1兼容性认证
嵌入式硬件·开源·鸿蒙
想你依然心痛3 小时前
HarmonyOS 5.0行业解决方案:基于端侧AI的智能工业质检APP开发实战
人工智能·华为·harmonyos
Sylus_sui3 小时前
鸿蒙 HarmonyOS 4.0+ 音乐播放器企业级完整实现(后台播放 + 系统播控中心 + 全功能)
华为·harmonyos
轻口味4 小时前
HarmonyOS 6 原生高性能相机框架:GPUImage (libgpuimagelib) 深度架构解析与实战全纪录
数码相机·架构·harmonyos
小雨青年6 小时前
鸿蒙 HarmonyOS 6 | 网络请求超时重试与弱网适配深度解析
网络·华为·harmonyos
坚果的博客6 小时前
HarmonyOS Electron 适配器架构深度解析
华为·开源·harmonyos
Xinstall渠道统计平台6 小时前
鸿蒙小艺Claw接管手机,App如何精准识别系统级Agent流量?
华为·智能手机·harmonyos
王码码20351 天前
Flutter 三方库 sparky 的鸿蒙化适配指南 - 实现极简 2D 游戏引擎功能、支持高效精灵图渲染与跨端游戏逻辑
flutter·harmonyos·鸿蒙·openharmony
●VON1 天前
Flutter组件通信详解:父子组件交互的最佳实践
javascript·flutter·华为·交互·harmonyos·von