HO与OH差异之Navigation三

在上一篇内容中我们介绍了HO与OH差异之Navigator,我们也了解了Navigator的基本概念和大致了解了一下他的基础用法,既然谈到差异肯定就不止这两种差异,今天就让我们来了解第三种差异NavRouter,其中在HO中我们并没有这种路由方式但是在OH中我们就存在这种路由方式。

首先我们先介绍一下NavRouter的基本概念

NavRouter: 导航组件,默认提供点击响应处理,不需要开发者自定义点击事件逻辑。

也就是说它也是天然的支持进行跳转,但是真的会有这么简单吗?

其中肯定有些必要的条件在这其中:

必须包含两个子组件,其中第二个子组件必须为NavDestination。

子组件个数异常时:

  1. 有且仅有1个时,触发路由到NavDestination的能力失效。
  2. 有且仅有1个时,且使用NavDestination场景下,不进行路由。
  3. 大于2个时,后续的子组件不显示。
  4. 第二个子组件不为NavDestination时,触发路由功能失效。

也就是说其实它的这种能力是实现我们在一个开发的页面进行两个页面的跳转,什么意思呢?其实就是相当于我们在同一个屋子里造了两间房这个意思。不用我们再单独的购入另外一个屋子。换成我们这边的思路就是我们只需要在一个@Entry页面进行开发,另外一个可以是组件,这就是一种性能优化上的体现。他不进行深度的拷贝。

接下来我们上示例:

scss 复制代码
@Entry
@Component
struct NavRouterPage {

  build() {
    NavRouter() {
      Column() {
        Button("点击我进行跳转到下一个路由")
      }
      NavDestination() {
        Text("我是点击跳转后的页面")
      }.title("NavDestination")
    }
    .mode(NavRouteMode.PUSH)
  }
}

如上代码,与图片!!翻车了吗难道?为什么无法进行跳转?

似乎差点就要被搞懵逼了,但是我们仔细想想NavRouter只是一个导航组件,它还是要有依赖的,依赖他的大哥"Navigation",跳转的组件是NavDestination,从一开始学习我们就知道Navigation与NavDestination是相互搭配使用的,此时我们加上Navigation的效果如下:

scss 复制代码
@Entry
@Component
struct NavRouterPage {

  build() {
    Navigation() {
      NavRouter() {
        Column() {
          Button("点击我进行跳转到下一个路由")
        }
        NavDestination() {
          Text("我是点击跳转后的页面")
        }.title("NavDestination")
      }
      .mode(NavRouteMode.PUSH)
    }
  }
}

在外层加个Navigation就可以进行跳转了。其中NavRouter还有很多的属性可以让我们进行使用,其中我演示代码中的mode就是其中之一,主要功能是配置跳转的方式。

其中NavRouter除了可以使用推荐的写法外我们还可以进行自定义的跳转,我们可以进行配置NavRouter的参数进行跳转,NavRouter(value: RouteInfo)。

但是这种方式就和我们一开始使用Navigation有点类似,需要注册一个路由栈然后通过路由栈进行跳转,示例如下:

less 复制代码
@Entry
@Component
struct NavRouterPage {

  build() {
    Navigation() {
      NavRouter({ name: "NavRouterPage2" }) {
        Column() {
          Button("点击我进行跳转到下2页面")
        }
      }
      .mode(NavRouteMode.PUSH)
    }
  }
}
scss 复制代码
@Builder
function NavRouterPage2Builder() {
  NavRouterPage2()
}

@Entry
@Component
struct NavRouterPage2 {

  build() {
    NavDestination() {
      Text("我是NavDestination2页面")
    }.title("NavDestination2")
  }
}

Harmony OS NEXT / OpenHarmony API12

本次就暂时介绍这么多, 在下一篇内容中我会给大家介绍一下样式复用的修饰器

谢谢各位的观看,有错误不足的地方, 本人乐于接受各位的意见

相关推荐
木斯佳1 小时前
HarmonyOS 本地存储实战:记账本案例改造实现日历联动
华为·harmonyos
李游Leo2 小时前
别让一张 12MB 的照片拖垮页面:ImageSource / PixelMap / ImagePacker 的工程化处理链路
harmonyos
nashane2 小时前
HarmonyOS 6学习:画中画(PiP)状态同步与场景化实战指南
学习·pip·harmonyos·harmonyos 5
@不误正业3 小时前
鸿蒙小艺智能体开放平台实战-接入系统级AI-Agent能力
人工智能·华为·harmonyos
IntMainJhy6 小时前
「Flutter三方库sqflite的鸿蒙化适配与实战指南:从入门到踩坑的本地数据库开发全记录」
数据库·flutter·华为·信息可视化·数据库开发·harmonyos
前端技术8 小时前
HarmonyOS开发:鸿蒙应用开发发展史
华为·harmonyos
Hello__77779 小时前
开源鸿蒙 Flutter 实战|自定义头像组件全流程实现
flutter·华为·harmonyos
IntMainJhy10 小时前
【flutter for open harmony】第三方库Flutter成就解锁彩纸动画的鸿蒙化适配与实战指南
harmonyos
Lanren的编程日记11 小时前
任务77:Flutter 鸿蒙应用视频录制功能实战:视频录制+录制控制+视频编辑,打造完整视频处理能力
flutter·音视频·harmonyos
Hello__777711 小时前
开源鸿蒙 Flutter 实战|进度条组件全流程实现
flutter·开源·harmonyos