鸿蒙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越来越少,工资越来越高

相关推荐
十里-6 小时前
vue.js 2前端开发的项目通过electron打包成exe
前端·vue.js·electron
奥特曼_ it6 小时前
【数据分析+机器学习】基于机器学习的招聘数据分析可视化预测推荐系统(完整系统源码+数据库+开发笔记+详细部署教程)✅
笔记·数据挖掘·数据分析
雨季6666 小时前
构建 OpenHarmony 简易文字行数统计器:用字符串分割实现纯文本结构感知
开发语言·前端·javascript·flutter·ui·dart
九 龙6 小时前
Flutter框架跨平台鸿蒙开发——水电缴费提醒APP的开发流程
flutter·华为·harmonyos·鸿蒙
小北方城市网6 小时前
Redis 分布式锁高可用实现:从原理到生产级落地
java·前端·javascript·spring boot·redis·分布式·wpf
console.log('npc')7 小时前
vue2 使用高德接口查询天气
前端·vue.js
2401_892000527 小时前
Flutter for OpenHarmony 猫咪管家App实战 - 添加支出实现
前端·javascript·flutter
天马37987 小时前
Canvas 倾斜矩形绘制波浪效果
开发语言·前端·javascript
四维碎片7 小时前
QSettings + INI 笔记
笔记·qt·算法
天天向上10247 小时前
vue3 实现el-table 部分行不让勾选
前端·javascript·vue.js