HarmonyOS NEXT实战开发——Navigation页面跳转对象传递案例

介绍

本示例主要介绍在使用Navigation实现页面跳转时,如何在跳转页面得到转入页面传的类对象的方法。实现过程中使用了第三方插件class-transformer,传递对象经过该插件的plainToClass方法转换后可以直接调用对象的方法,

效果图预览

使用说明

  1. 从首页进入本页面时,会传递一个类对象UserBookingInfo。点击“换个座位”按钮会调用该类对象的generateRandSeatNo()方法,该方法随机生成一个座位号。

实现思路

在oh-package.json5中添加第三方插件class-transformer的依赖

   "dependencies": {
       "class-transformer": "^0.5.1"
   }

在使用第三方插件class-transformer的页面导入class-transformer库。 

   import { plainToClass } from "class-transformer";

定义要传递的类 

   // 定义一个用户类
   export class UserBookingInfo {
     userName: string = '张山'; // 姓名
     userID: string = '332045199008120045'; // 证件号
     date: string = '1月1日' // 日期
     seatNo: number = 0; // 座位号
     price: number = 200; // 价格
     constructor(name: string, id: string, date: string) {
       this.userName = name;
       this.userID = id;
       this.date = date;
     }
   
     // 获取随机座位号
     generateRandSeatNo(): number {
       this.seatNo = Math.floor(Math.random() * (200 - 1) + 1);  // 获取200以内随机号
       return this.seatNo;
     }
   }

将传递过来的参数通过class-transformer的plainToClass方法转化为类对象。 

   let bookingString:string = this.pageStack.getParamByName('NavigationParameterTransfer')[0] as string;
   // 转化成普通对象
   let userBookingTmp: UserBookingInfo = JSON.parse(bookingString);
   // TODO:知识点:通过调用第三方插件class-transformer的plainToClass方法转换成类对象, 不进行转换直接使用userBookingTmp调用getUserInfo方法会造成crash
   this.userBooking = plainToClass(UserBookingInfo, userBookingTmp);

高性能知识点

不涉及

工程结构&模块类型

   navigationparametertransfer                        // har类型
   |---src\main\ets\components
   |   |---UserBookingInfo.ets                        // 要传递的类对象
   |---src\main\ets\view
   |   |---NavigationParameterTransferView.ets        // 视图层-Navigation主页面
### 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 提供了内置的错误处理机制,确保在导航失败时能够优雅地回退到默认页面。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值