HarmonyOS鸿蒙学习笔记(9)Navigator组件实现页面路由跳转

本文介绍了如何在HarmonyOS中使用Navigator组件进行页面跳转,包括从NavigatorPageA到NavigatorPageB的跳转,并详细展示了如何传递参数和接收参数的过程。同时,给出了商品列表到商品详情页的数据传递示例,帮助开发者更好地理解和应用HarmonyOS的路由功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

HarmonyOS鸿蒙学习笔记(2)路由ohos.router的使用一文中讲解了鸿蒙路由的使用方法,在这里分享另外一个具有路由跳转功能的组件Navigator
该组件可以将UI组件包裹起来,点击被包裹的UI组件可以实现页面跳转的效果。
在本博文中将实现点击Text组件,实现从页面NavigatorPageA 跳转到NavigatorPageB页面的效果,同时将参数传给NavigatorPageB.

@Entry
@Component
export struct NavigatorPageA {
  build() {
    Column() {
      //点击跳转到NavigatorPageB页面
      Navigator({ target: 'pages/NavigatorPageB' }) {
        Text("点击我跳转").fontSize(30).fontColor(Color.Blue)
      }
      .params({ text: "Hello" })//传递参数Hello

    }.width('100%')
    .height('100%')
    .alignItems(HorizontalAlign.Center)//让图片水平居中
    .justifyContent(FlexAlign.Center)//让图片垂直居中
  }
}

通过上面的代码可以看出:
1、通过配置Navigator的target属性来指定跳转的目的页面。
2、通过Navigator的params方法来向目的页面传递参数。
NavigatorPageA实现效果如如下:
在这里插入图片描述

再来看看NavigatorPageB的具体实现:

import router from '@system.router'

@Entry
@Component
export struct NavigatorPageB {
  build() {
    Column() {
     //点击的时候回返回NavigatorPageA 
      Navigator({ target: 'pages/NavigatorPage' ,type:NavigationType.Back}) {
        Text(router.getParams()['text'].toString()).fontSize(30).fontColor(Color.Red)
         //也可以通过router.getParams().text.toString()拿具体的值
         //Text(router.getParams().text.toString()).fontSize(30).fontColor(Color.Red)
      }
    }.width('50%')
    .height('100%')
    .alignItems(HorizontalAlign.Center)//让图片水平居中
    .justifyContent(FlexAlign.Center)//让图片垂直居中
  }
}

具体实现效果如下:
在这里插入图片描述

NavigatorPageB做了如下两个操作:
1、通过router.getParams()['text'].toString()或者router.getParams().text.toString()获取NavigatorPageA传来的参数
2、点击Text的时候返回NavigatorPageA,相当于点击了返回键。是因为NavigatorPageB页面中的Navigator配置了type:NavigationType.Back

另外Navigator也支持传递对象,比如定义一个商品类:

let NextId = 0;
export class GoodsData {
  id: string;
  title: string;
  content: string;
  price: number;
  imgSrc: Resource;

  constructor(title: string, content: string, price: number, imgSrc: Resource) {
    this.id = `${NextId++}`;
    this.title = title;
    this.content = content;
    this.price = price;
    this.imgSrc = imgSrc;
  }
}

比如商品里列表页点击进入商品详情页:

@Component
struct GoodsListItem {
  //商品信息类
  private goodsItem: GoodsData

  build() {
  //点击跳转行情
    Navigator({ target: 'pages/ShoppingDetail' }) {
        //省略布局文件
    }
    .params({ goodsData: this.goodsItem })
    .margin({ right: 5})
  }
}

那么商品详情页就可以这么写:

@Entry
@Component
struct ShoppingDetail {
  //获取商品数据,使用as语法将数据转换成GoodsData对象
  private goodsItem: GoodsData = router.getParams()['goodsData'] as GoodsData;
  build() {
      Column() {
          //显示名称
           Text(this.goodsItem.title).fontColor(Color.Green).fontSize(30)
    }
  }
}

参考资料:
Navigator官方资料
HarmonyOS鸿蒙学习笔记(2)路由ohos.router的使用

### 创建 HarmonyOS 路由容器组件实现页面跳转HarmonyOS 开发中,通过 `Navigator` 组件可以轻松实现页面之间的路由跳转。以下是具体的操作流程以及示例代码: #### 1. 配置路由信息 在应用的配置文件中定义页面路由路径和名称。这一步骤通常是在项目的入口文件或者全局配置中完成。 ```typescript // app.config.ts 或其他全局配置文件 export const routes = [ { path: '/home', name: 'Home' }, { path: '/details', name: 'Details' } ]; ``` 此部分用于指定各个页面对应的路径及其唯一标识名[^1]。 --- #### 2. 使用 Navigator 容器组件 `Navigator` 是 HarmonyOS 提供的一个专门用于管理页面跳转的容器组件。它支持多种方式触发页面跳转操作。 ##### 基本语法结构 ```typescript import { Router, Routes } from '@ohos/router'; @Component struct App { build() { Column() { Navigator(routes: this.routes) {} // 将路由列表传递给 Navigator }.width('100%').height('100%') } private routes = [ { uri: '/home', component: Home }, // 指定目标 URI 和对应组件 { uri: '/details', component: Details } ]; } ``` 上述代码展示了如何初始化并注册多个页面到 `Navigator` 中[^5]。 --- #### 3. 执行页面跳转 利用 `Router` 的实例化对象调用 `push()` 方法来发起新的页面跳转请求。 ```typescript @Entry @Component struct HomePage { @State index: number = 0; build() { Row() { Button("Go to Details") { onClick: () => { router.push('/details'); // 推送新页面至栈顶 } } } } } @Component struct DetailPage { build() { Text("This is the detail page!") .fontSize(20) .fontColor('#FFFFFF'); } } ``` 这里演示了从主页 (`HomePage`) 到详情页 (`DetailPage`) 的简单跳转逻辑。 --- #### 4. 添加命名路由 (可选) 如果希望更灵活地控制跳转行为,则可以通过为每条记录分配唯一的字符串键值对形式参数——即所谓的 **命名路由** 来简化 URL 构造过程。 ```typescript @Entry({ routeName: 'detailView' }) @Component struct DetailPage {} function navigateToDetailView() { router.push({ routeName: 'detailView', params: { id: 123 } // 可附加额外数据传输 }); } ``` 这种做法不仅提高了代码可读性和维护效率,还允许开发者直接引用预设好的名字而非硬编码实际地址[^3]。 --- #### 5. 处理返回事件 除了前进外,还需要考虑用户可能随时按下物理按键退出当前视图的情况。此时可通过监听特定信号源捕获此类动作的发生时刻以便采取适当措施加以应对。 ```typescript @Entry @Component struct SomeComponent { onPageBackPress(): boolean { console.info("User pressed back button"); return false; // 返回 true 表示拦截默认处理机制 } build() {} } ``` 注意此处仅适用于标记有 `@Entry` 注解的顶级单元才具备完整的生命周期回调接口访问权限[^2]。 --- ### 总结 综上所述,在 HarmonyOS 平台构建跨屏交互体验时,合理运用内置工具链能够极大程度降低复杂度的同时提升整体性能表现水平。借助于清晰明了的设计模式配合简洁直观的语言特性共同作用下达成预期效果变得轻而易举起来!
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

郭梧悠

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值