鸿蒙NEXT开发浅进阶到精通15:从零搭建Navigation路由框架

各位开发者朋友们很久没有写东西了,这篇稿子是一个给南大做的演讲交流稿子,当时也是考虑到对于初级鸿蒙开发者来说,在项目上有大佬搭建好navigation路由,可能会用但可能让他从零搭建,着实有些困难,那这篇文章可以作为很好的参考。

1.建立Navigation主入口页面

ts 复制代码
@Entry
@Component
struct Index {
  @State message: string = 'Hello World';

  pathInfo:NavPathStack = new NavPathStack()

  build() {
   Navigation(this.pathInfo){
     Column({space:20}){
      }
     .height('100%')
     .width('100%')
     .padding(20)
   }
    .height('100%')
    .width('100%')
    .hideToolBar(true)
   .linearGradient({ angle: 135, colors: [['#d3e1fe', 0.1], ['#FFFFFF', 1 - 0.618], ['#2d96ed', 1]] })
  }

  @Builder
  cardItemBuilder(icon:ResourceStr,title:string,desc:string,pageName:string) {
    Row({space:20}) {
      Image(icon)
        .height(100)
        .width(100)
        .borderRadius(10)
      Column({space:12}) {
        Text(title)
          .fontSize(20)
          .fontWeight(500);
        Text(desc)
          .fontSize(14)
          .fontWeight(400)
          .opacity(0.5);
      }
      .layoutWeight(1)
      .alignItems(HorizontalAlign.Start);
    }
    .width('100%')
    .borderRadius(10)
    .justifyContent(FlexAlign.SpaceBetween)
    .alignItems(VerticalAlign.Center)
    .backgroundColor('#0a59f7')
    .linearGradient({ angle: 135, colors: [['#0a59f7', 0.1], ['#FFFFFF', 1 - 0.618], ['#0a59f7', 1]] })
    .onClick(() => {
      //跳功能页面
      this.pathInfo.pushPathByName(pageName,null)
      // onClickFun()
    })
  }
}

2.建立NavDestination子页面或二级页面


这个构建函数很重要

ts 复制代码
@Builder
export function CardVerifyPageBuilder() {
  CardVerifyPage()
}

3.创建唯一的导航控制器NavPathStack类型实例,并于Navigation绑定

4.建立并注册Navigation路由表 router_map.json

此文件为开发者建立,目前编辑器初始化新工程未带此文件,且文件所在路径固定

建立后,将所有需要路由跳转的子页面路径和页面构建函数放在

ts 复制代码
{
  "routerMap": [
    {
      "name": "WordToVoicePage",
      "pageSourceFile": "src/main/ets/pages/Components/WordToVoicePage.ets",
      "buildFunction": "WordToVoicePageBuilder"
    }
  ]
}

5.声明路由方式

这个要在module.json5中声明,注意如果不配置,则路由不生效

6.路由跳转

主页面发送跳转,子页面接收路由导航控制器(如需三级+跳转)

ts 复制代码
this.navigation.push(router_map.get("page_name"));

 .onReady(((context: NavDestinationContext) => {
      this.pathInfo = context.pathStack
    }))

新的一年祝大家bug越来越少,工资越来越高

相关推荐
Catrice0几秒前
HarmonyOS ArkTS 实战:实现一个校园宿舍电费查询与分摊应用
华为·harmonyos
ji_shuke2 分钟前
远程排查 Web 系统问题:如何导出 HAR 文件协助定位
前端·问题排查
学计算机的计算基9 分钟前
操作系统内存管理全解:虚拟内存、页表、COW、malloc、OOM一篇搞定
java·笔记·算法
AOwhisky16 分钟前
Python 学习笔记(第五期)——组合数据类型:列表、元组、集合与字典精讲——核心知识点自测与详解
开发语言·笔记·python·学习·云计算
砚凝霜17 分钟前
软考网络工程师|第 2 章 信道延迟、传输介质、数据编码、数字调制、PCM 完整备考笔记
网络·笔记·pcm
2301_7681034917 分钟前
HarmonyOS趣味相机实战第31篇:图片文档List、详情弹层与删除状态闭环
list·harmonyos·arkts·状态管理·arkui
程序员爱钓鱼29 分钟前
Rust String 与 &str 详解:字符串所有权、借用与转换
前端·后端·rust
woshihuanglaoshi31 分钟前
数据迁移与版本管理 - Flutter在鸿蒙平台实现数据库升级策略
数据库·学习·flutter·华为·harmonyos·鸿蒙·鸿蒙系统
码农学院34 分钟前
GEO与SEO协同:从传统搜索到生成式搜索的平滑迁移路径
服务器·前端·python
爱写代码的阿木41 分钟前
基于鸿蒙OS开发附近社交游戏平台(八)-聊天组件
华为·个人开发·harmonyos