第6篇:HarmonyOS 鸿蒙Next Navigation系统路由表(推荐)

发布于 1周前 作者 sinazl 来自 鸿蒙OS

第6篇:HarmonyOS 鸿蒙Next Navigation系统路由表(推荐)
<markdown _ngcontent-dxl-c237="" class="markdownPreContainer">

第6篇:Navigation系统路由表(推荐)

自定义的路由模块太复杂,太难用了,而API12提供了系统的路由表注册!非常简单就能实现我们的路由功能。

1.使用系统路由表实现页面之间的跳转

1.1.在跳转目标模块的配置文件module.json5添加路由表配置:

可以是module,也可以是entry。我们在项目的entry和login模块都加上

  {
    "module" : {
      "routerMap": "$profile:route_map"
    }
  }
<button style="position: absolute; padding: 4px 8px 0px; cursor: pointer; top: 4px; right: 8px; font-size: 14px;">复制</button>

1.2.在工程resources/base/profile中创建route_map.json文件【login模块为例】,添加如下配置信息:

 {
  "routerMap": [
    {
      "name": "LoginPage",
      "pageSourceFile": "src/main/ets/pages/LoginPage.ets",
      "buildFunction": "RegisterBuilder",
      "data": {
        "description" : "this is LoginPage"
      }
    }
  ]
}
<button style="position: absolute; padding: 4px 8px 0px; cursor: pointer; top: 4px; right: 8px; font-size: 14px;">复制</button>

配置说明如下:

配置项 说明
name 跳转页面名称。
pageSourceFile 跳转目标页在包内的路径,相对src目录的相对路径。
buildFunction 跳转目标页的入口函数名称,必须以[@Builder](/user/Builder)修饰。
data 应用自定义字段。可以通过配置项读取接口getConfigInRouteMap获取。

1.3.在LoginPage页面,添加RegisterBuilder注册方法:

  // 跳转页面入口函数
  [@Builder](/user/Builder)
  export function RegisterBuilder() {
    LoginPage()
  }

@Component struct LoginPage { pathStack: NavPathStack = new NavPathStack()

build() {
  NavDestination() {
  }
  .onReady((context: NavDestinationContext) =&gt; {
     <span class="hljs-keyword"><span class="hljs-keyword">this</span></span>.pathStack = context.pathStack
  })
}

} <button style="position: absolute; padding: 4px 8px 0px; cursor: pointer; top: 4px; right: 8px; font-size: 14px;">复制</button>

1.4.通过pushPathByName等路由接口进行页面跳转。

pageStack : NavPathStack = new NavPathStack();
 build() {
      Navigation(this.pageStack){
      }.onAppear(() => {
        this.pageStack.pushPathByName("LoginPage", null, false);
      })
      // .navDestination(this.pageMap)//注意:此时Navigation中可以不用配置navDestination属性
      .hideNavBar(true)
    }
<button style="position: absolute; padding: 4px 8px 0px; cursor: pointer; top: 4px; right: 8px; font-size: 14px;">复制</button>

2.重新整理项目

2.1.版本要求

API12(beta1)及以上提供的能力。build-profile.json5配置:

 "compileSdkVersion": "5.0.0(12)",
 "compatibleSdkVersion": "5.0.0(12)",
<button style="position: absolute; padding: 4px 8px 0px; cursor: pointer; top: 4px; right: 8px; font-size: 14px;">复制</button>

2.2.移除router模块,以及相关引用。

2.3.增加RouterUtil简单处理

export class RouterUtil {
  static navPathStack: NavPathStack = new NavPathStack();
  static routerStack: Array<string> = new Array();

public static push(name: string, parm: object | undefined = undefined, callback: Callback<PopInfo> | undefined = undefined) { RouterUtil.routerStack.push(name); RouterUtil.navPathStack.pushPathByName(name, parm, callback, true) }

public static replace(name: string, parm: object | undefined = undefined) { RouterUtil.routerStack.pop(); RouterUtil.routerStack.push(name); RouterUtil.navPathStack.replacePathByName(name, parm, true) }

public static pop(result?: Object) { if (result !== undefined) { RouterUtil.navPathStack.pop(result, true) } else { RouterUtil.navPathStack.pop(true) } }

public static popHome(){ RouterUtil.routerStack.length = 0; RouterUtil.navPathStack.clear() } } <button style="position: absolute; padding: 4px 8px 0px; cursor: pointer; top: 4px; right: 8px; font-size: 14px;">复制</button>

2.4.具体可以看demo,tag:006。

到这里,所有的内容已经结束了!本章的完整源码已经上传到gitee了:鸿蒙应用0-1开发

</markdown>
15 回复
请问 我看源码 导入的RouterUtils 使用到的[@common](/user/common)/utils  这是怎么做到能够使用@的

“dependencies”: { “@common/utils”: “file:…/feature/login” } “@common/utils”是自定义的。

博主写的太好了,学习了

一起学习,哈哈

系统路由表过多,对App的启动时间有影响吗?

虽然看不到源码,但这个应该也是根据动态路由来改造的,所以不应该存在这个问题。

route_map怎么配置跨模块的地址,显示必须要src/ets的相对地址

找HarmonyOS工作还需要会Flutter的哦,有需要Flutter教程的可以学学大地老师的教程,很不错,B站免费学的哦:https://www.bilibili.com/video/BV1S4411E7LY/?p=17

每个模块都有自己的route_map配置文件。

有个疑问:Navigation包含的是3个Tab, 第一个Tab子组件Home是一个 [@Builder](/user/Builder)修饰的函数指定的一个HomeComp组件,HomeComp组件里怎么跳转页面?

我现在也遇到这个问题可

使用Navigation,从login登录以后跳到index,按返回应该是回到桌面的,可是回到了login页面,这个怎么解决呢?replacePath无效

关于HarmonyOS鸿蒙Next Navigation系统路由表的问题,以下是专业回复:

HarmonyOS的Navigation系统路由表是API 12起开始支持的,通过配置文件module.json5和route_map.json实现页面路由的注册和管理。在route_map.json中配置页面名称、路径及构建函数,然后在代码中通过pushPathByName等方法进行页面跳转。确保配置文件与代码中的路由信息一致,以避免跳转异常。如果问题依旧没法解决请加我微信,我的微信是itying888。

回到顶部