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

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

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

相关推荐
lili-felicity1 天前
React Native for Harmony:Rating 评分组件- 支持全星 / 半星 / 禁用 / 自定义样式
react native·华为·harmonyos
grd41 天前
RN for OpenHarmony 小工具 App 实战:屏幕尺子实现
笔记·harmonyos
No Silver Bullet1 天前
HarmonyOS NEXT开发进阶(十九):如何在 DevEco Studio 中查看已安装应用的运行日志
华为·harmonyos
大雷神1 天前
HarmonyOS智慧农业管理应用开发教程--高高种地
华为·harmonyos
南村群童欺我老无力.1 天前
Flutter 框架跨平台鸿蒙开发 - 开发双人对战五子棋游戏
flutter·游戏·华为·typescript·harmonyos
夜雨声烦丿1 天前
Flutter 框架跨平台鸿蒙开发 - 消消乐游戏开发教程
flutter·游戏·华为·harmonyos
夜雨声烦丿1 天前
Flutter 框架跨平台鸿蒙开发 - 数独求解器开发教程
flutter·游戏·华为·harmonyos
世人万千丶1 天前
Day 5: Flutter 框架文件系统交互 - 鸿蒙沙盒机制下的文件读写与安全策略
学习·flutter·华为·harmonyos·鸿蒙·鸿蒙系统
南村群童欺我老无力.1 天前
Flutter 框架跨平台鸿蒙开发 - 白噪音助眠应用开发指南
flutter·华为·harmonyos
猛扇赵四那边好嘴.1 天前
Flutter 框架跨平台鸿蒙开发 - 睡眠记录应用开发教程
flutter·华为·harmonyos