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

相关推荐
海绵宝宝转agent1 小时前
learn-claude-code第1-5章开源学习笔记分享
人工智能·笔记·python·学习
福兮说3 小时前
设计稿是 #4A7C6F,页面量出来是 #4B7C6F:HEX、HSL、透明度、canvas 来回转的七个坑
前端·javascript·css·canvas
郑州光合科技余经理4 小时前
海外版外卖加盟:总站与分站配送规则怎么分开管
java·开发语言·前端·后端·uni-app·php·ai编程
91刘仁德4 小时前
HTTP协议详解:从URL到HTTP服务器的完整实战
服务器·网络·笔记·网络协议·http
小呆呆6664 小时前
副业搞起来,小说,漫画,漫剧的成本优化思路
前端·后端·面试
Dovis(誓平步青云)4 小时前
浇水提醒刚弹出又消失,植物状态别只存一个百分比
开发语言·前端·javascript·pdf·ecmascript·电脑
码艺-Alimjan5 小时前
Vben Admin 新增维吾尔语 Vben-Modal的关键坑之一
前端·javascript·vue.js
可乐鸡翅yeah_6 小时前
hls.js 手动自定义 http 请求 loader,修改请求头实战
开发语言·前端·javascript·网络协议·http·ecmascript·m3u8在线
李游Leo6 小时前
HarmonyOS 7 DualCart 平行视界适配实录 04:EasyGo × 虚拟容器:商品比价双详情与分栏比例策略【鸿蒙心迹】
华为·harmonyos
IT_陈寒6 小时前
Vite静态资源导入这个坑我帮你们踩过了
前端·人工智能·后端