鸿蒙NEXT开发-Navigation组件导航

鸿蒙NEXT开发之Navigation组件导航详解

 注意:博主有个鸿蒙专栏,里面从上到下有关于鸿蒙next的教学文档,大家感兴趣可以学习下

如果大家觉得博主文章写的好的话,可以点下关注,博主会一直更新鸿蒙next相关知识

目录

1. 基本介绍

2. 子组件

3. 接口

4. 设置页面显示模式

4.1 自适应模式

4.2 单页面模式

4.3 分栏模式

5. 设置标题栏模式

5.1 Mini模式标题栏

5.2 Full模式

6. 路由操作

6.1 初始化代码

6.2 页面跳转

6.3 页面返回

6.4 页面替换

6.5 页面删除

6.6 参数获取

7. 子页面

7.1 页面显示类型

7.2 页面生命周期

8. 小案例


1. 基本介绍

Navigation是路由导航的根视图容器,一般作为页面(@Entry)的根容器,包括单栏(Stack)、分栏(Split)和自适应(Auto)三种显示模式。Navigation组件适用于模块内和跨模块的路由切换,通过组件级路由能力实现更加自然流畅的转场体验,并提供多种标题栏样式来呈现更好的标题和内容联动效果。一次开发,多端部署场景下,Navigation组件能够自动适配窗口显示大小,在窗口较大的场景下自动切换分栏展示效果。

注意:页面路由推荐使用Navigation

Navigation的这种跳转方式耦合度较高,不适合大型的项目解耦开发。

2. 子组件

可以包含子组件。

从API Version 9开始,推荐与NavRouter组件配合NavDestination属性进行页面路由

@Entry
  @Component
  struct Index {
    build() {
      Navigation() {
        NavRouter() {
          Row() {
            Button("去A页面")
          }
          .height(60)
          NavDestination() {
            Text("A页面内容")
          }
          .title("A页面")
        }
        NavRouter() {
          Row() {
            Button("去B页面")
          }
          .height(60)
          NavDestination() {
            Text("B页面内容")
          }
          .title("B页面")
        }
      }
      .title("测试")
        .titleMode(NavigationTitleMode.Mini)
    }
  }

从API Version 10开始,推荐使用NavPathStack配合NavDestination属性进行页面路由。

@Entry
  @Component
  struct Index {
    @Provide
    stackPath: NavPathStack = new NavPathStack() // 声明一个pathStack对象

    @Styles
    gridStyle () {
      .height(100)
        .borderRadius(10)
        .backgroundColor(Color.Red)
        .margin(10)

    }
    @Builder
    getPageContent (name: string) {

      if(name === "friend") {
        // 渲染好友组件
        Friend()
      }
      else if(name === "my") {
        // 渲染我的组件
        My()
      }
      else if(name === "connect") {
        // 渲染联系人组件
        Connect()
      }
      else if(name === "chat") {
        // 渲染聊天组件
        Chat()
      }

    }
    build() {
      // 绑定关系
      Navigation(this.stackPath) {
        //  四个导航 导航不同的页面
        // 好友 我的 联系人 聊天
        GridRow ({ columns: 2 }) {
          GridCol() {
            Text("好友")
              .fontColor(Color.White)
          }
          .gridStyle()
            .onClick(() => {
              this.stackPath.pushPathByName("friend", null)
            })
          GridCol() {
            Text("我的")
              .fontColor(Color.White)
          }  .gridStyle()
            .onClick(() => {
              this.stackPath.pushPathByName("my", null)
            })
          GridCol() {
            Text("联系人")
              .fontColor(Color.White)
          }  .gridStyle()
            .onClick(() => {
              this.stackPath.pushPathByName("connect", null)
            })
          GridCol() {
            Text("聊天")
              .fontColor(Color.White)
          }  .gridStyle()
            .onClick(() => {
              this.stackPath.pushPathByName("chat", null)
            })
        }
      }
      .title("主页")
        .titleMode(NavigationTitleMode.Mini)
        .navDestination(this.getPageContent)
    }
  }

@Component
  struct Friend {
    @Consume
    stackPath: NavPathStack
    build() {
      NavDestination() {
        Text("好友组件")
        Button("到我的").onClick((event: ClickEvent) => {
          this.stackPath.replacePathByName("my", null)
        })
      }
      .title("好友")
    }
  }
@Component
  struct My {
    build() {
      NavDestination() {
        Text("我的")
      }
      .title("我的")
    }
  }
@Component
  struct Connect {
    build() {
      NavDestination() {
        Text("联系人")
      }
      .title("联系人")
    }
  }
@Component
  struct Chat {
    build() {
      NavDestination() {
        Text("聊天")
      }
      .title("聊天")
    }
### HarmonyOS 下一个导航功能或实现方式 HarmonyOS导航功能与 Android Jetpack 的 Navigation 组件类似,但其设计和实现方式更加贴合分布式设备的特性。以下是关于 HarmonyOS 中下一个导航功能或实现方式的详细说明: #### 1. **依赖添加** 在 HarmonyOS 中,导航功能的实现需要引入相关依赖。虽然 HarmonyOS 并未直接使用 Android 的 `navigation` 组件,但其提供了类似的模块化导航支持。以下是一个典型的依赖添加示例[^4]: ```gradle dependencies { implementation 'com.huawei.harmonyos:navigation-core:2.0.0' implementation 'com.huawei.harmonyos:navigation-ui:2.0.0' implementation 'com.huawei.harmonyos:navigation-dynamic-features:2.0.0' } ``` 这些依赖分别用于核心导航功能、用户界面交互以及动态功能模块的支持。 #### 2. **导航组件的核心结构** HarmonyOS导航组件同样由三个关键部分组成,类似于 Android Jetpack 的 Navigation 组件[^5]: - **Navigation Graph**:定义了应用内的所有页面及其之间的导航路径。导航图通常以 XML 文件的形式存储在 `res/navigation` 目录下。 - **NavHost**:作为导航目标的容器,负责显示当前页面内容。HarmonyOS 提供了 `AbilitySlice` 作为基础单元来实现 NavHost。 - **NavController**:管理导航逻辑的对象,控制页面之间的切换和参数传递。 以下是一个简单的导航图示例[^6]: ```xml <navigation xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/nav_graph" android:startDestination="@id/home_slice"> <fragment android:id="@+id/home_slice" android:name="com.example.HomeAbilitySlice" /> <fragment android:id="@+id/detail_slice" android:name="com.example.DetailAbilitySlice" /> </navigation> ``` #### 3. **动态功能模块支持** HarmonyOS 支持动态功能模块(Dynamic Feature Module),允许开发者按需加载特定的功能模块。例如,当用户进入某个特定页面时,系统会自动下载并加载相关的模块[^7]。这种方式可以显著减少应用初始安装包的大小,同时提高用户体验。 #### 4. **代码示例** 以下是一个简单的导航实现示例,展示了如何从一个页面导航到另一个页面[^8]: ```java // 获取 NavController 实例 NavController navController = findNavController(this); // 导航到目标页面 navController.navigate(R.id.detail_slice); ``` #### 5. **跟踪失败的处理** 在 HarmonyOS导航实现中,也需要考虑类似 VSLAM 系统中的跟踪失败问题[^9]。例如,当用户在网络条件较差的情况下尝试加载动态模块时,可能会导致导航失败。为了解决这一问题,HarmonyOS 提供了内置的错误处理机制,确保在导航失败时能够优雅地回退到默认页面。 --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值