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()
      })
    }
  }
}

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

相关推荐
xmdy58661 天前
Flutter + 开源鸿蒙实战|城市智慧停车管理系统 Day4 停车订单生成+多状态管理+在线缴费+我的订单+会员中心+个人中心完善
flutter·开源·harmonyos
xmdy58661 天前
Flutter + 开源鸿蒙实战|城市智慧停车管理系统 Day8 进阶美化与真机调优篇
flutter·华为·harmonyos
Swift社区1 天前
鸿蒙 PC vs Web:谁才是未来应用形态?
前端·华为·harmonyos
忧云1 天前
KaihongOS 5.0|免费鸿蒙 X86 桌面系统|普通电脑直装|旧电脑复活 + 安卓应用兼容
harmonyos·鸿蒙系统·华为鸿蒙
廖松洋(Alina)1 天前
08单词切换与底部导航-鸿蒙PC端Electron开发
华为·electron·鸿蒙
廖松洋(Alina)1 天前
06百度OCR手写识别接入-鸿蒙PC端Electron开发
electron·ocr·harmonyos
千百元1 天前
怎么打包鸿蒙上架的app格式
华为·harmonyos
xmdy58661 天前
Flutter + 开源鸿蒙实战|城市智慧停车管理系统 Day6 全局组件封装+意见反馈+系统设置+代码重构+bug修复+细节调优
flutter·开源·harmonyos
xmdy58661 天前
Flutter + 开源鸿蒙实战|城市智慧停车管理系统 Day5 超时提醒弹窗+深浅色全局主题+登录页面+记住登录+隐私协议+全局UI美化+鸿蒙打包配置
flutter·开源·harmonyos
廖松洋(Alina)1 天前
01环境搭建与项目创建-鸿蒙PC端Electron开发
华为·electron·开源·harmonyos·鸿蒙