6. Harmony 路由和导航

 

Posted by     DH on December 2, 2024

路由

在鸿蒙中,使用@Router进行导航,使用比较简单,只需要注意一下几点:

(1)原理:路由使用的是栈实现,把一个个页面进行压栈,后进栈的页面位于最上面,后退就是出栈;注意鸿蒙的路由最深层级是32,也就是说最多压入32个页面到栈里面;

(2)路由模式:有两种push和replace。push是直接进栈,栈中页面数增加1,replace是替换栈顶的页面,栈内的页面数不变。例如在登录的时候,如果登录成功,应该是用replace替换登录页,防止在登录跳转到主页后,按后退键还可以退到登录页面;

(3)参数传递:在传递页面,调用是增加传递传输param。在接收页面使用Router.getParam方法进行接收;

(4)路由类型:分为Standard和single。Standard表示,栈内可以存在多个统一页面,single类型只能在栈内存在一个页面,使用single时需要注意,回退页面时,可能出现页面顺序的混乱;

进行简单的代码示例:

import { router } from '@kit.ArkUI';

@Entry
@Component
struct PropDemoPage {
  @State name: string = "张三";

  build() {
    Row() {
      childView({ childName: this.name })

      Button("跳转页面")
        .onClick(() => {
          this.name = "李四"
          router.pushUrl({
            url: 'pages/mainPage',
            params:{
              name:this.name,
              age:10
            }
          },router.RouterMode.Standard)
        })
    }
  }
}

@Component
struct childView {
  // 通过父组件传值
  @Prop childName: string = "";

  build() {
    Text(this.childName)
  }
}		

导航

下面是鸿蒙官网对Navigation组件的描述:

Navigation组件是路由导航的根视图容器,一般作为Page页面的根容器使用,其内部默认包含了标题栏、内容区和工具栏,其中内容区默认首页显示导航内容(Navigation的子组件)或非首页显示(NavDestination的子组件),首页和非首页通过路由进行切换。

目前也是鸿蒙推荐的用法,整体页面图示如下图所示:

image

一个简单的例子,实现页面的标题、副标题、菜单栏、工具栏的定制和页面之间的跳转: