HarmonyOS 鸿蒙Next关于ArkTS的页面导航组件Navigation的使用踩坑

发布于 1周前 作者 zlyuanteng 来自 鸿蒙OS

HarmonyOS 鸿蒙Next关于ArkTS的页面导航组件Navigation的使用踩坑

因为官方推荐使用Navigation进行路由导航,所以最近学习了下文档。发现文档有些地方讲解不是很仔细。根据自己的测试,写写记录。

学习思路

1.Navigation组件的页面布局:作为首页,组件参数(NavPathStack),组件内容分区(导航页<标题栏、工具栏、菜单栏>、子页)

2.页面导航:使用NavDestination组件作为子页面,通过NavPathStack调用页面操作接口

关于Navigation组件、页面操作详细内容,官方文档大部分描述也还是挺详细的,请参考:

使用指南https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/arkts-navigation-navigation-V5

首页Navigation功能接口https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/ts-basic-components-navigation-V5#pushpathbyname11

子页NavDestination功能接口https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/ts-basic-components-navdestination-V5

接下来说说官方文档描述不清晰的地方

1.Navigation组件的navDestination(https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/ts-basic-components-navigation-V5#navdestination10)属性,主要设置跳转的子页面。先说下Navigation的子页面提供方式,第一种:就是设置navDestination属性,第二种:通过系统路由表(https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/arkts-navigation-navigation-V5#系统路由表)。

第一种方式,使用时需要注意,builder函数(即@builder装饰器修饰的自定义构建函数)内,必须包含navDestination组件。两种形式截图如下:第二种形式是在自定义组件的build接口中。之前因为没看懂必须要包含navDestination组件,导致页面跳转功能无法使用。

cke_77766.png                             cke_78325.png

第二种方式,使用时需要注意去掉Navigation组件的navDestination的属性设置(即不设置),否则不会跳转到路由表中配置的页面,会优先跳转到navDestination的属性设置的页面去。

2.关于Navigation组件在预览器中交互,通过navDestination的属性设置的页面可以正常跳转。通过路由表配置(且没设置navDestination的属性)不会跳转,交互时,预览器报错,但是不提示报错内容。后来通过测试官方示例发现:本地模拟器可以正常交互;但是文档没有说明,花了比较长的时间才解决。所以最好在本地模拟器中进行Navigation开发的交互测试,预览器作为布局查看方式。

3.关于路由表的使用,路由表JSON文件的名字可以随意命名,但是后缀要是.json,并且在moudule配置中,文件名使用自己的文件名即可。文件名自己命名,有一个好处,就是可以配置多个路由表,根据需求启用哪一个,避免后期整理不方便,或者符合自己习惯,方便查找区分文件。例如:测试页面单独一个、正常功能页面一个,或者前一个版本一个,后一个版本一个,作为备份记录(例如:前一个版本中,页面名为A的路由项,所跳转的页面ets文件是a,但是在第二个版本中,页面名称不能变<因为NavPathStack的很多接口都是根据页面名来调用的>,就可以复制一份,只改对应的文件地址即可。)

4.还有一个补充:页面名(name成员)可以使用中文字符串,这个很重要

1 回复

作为IT专家,对于HarmonyOS 鸿蒙Next的ArkTS框架中的Navigation组件的使用,以下是一些常见的踩坑点及解释:

  1. navDestination属性:设置Navigation的子页面时,若使用navDestination属性,需在builder函数内包含navDestination组件,否则页面跳转功能可能无法使用。若选择通过系统路由表配置子页面,则需去掉Navigation组件的navDestination属性设置,否则页面会优先跳转到navDestination属性指定的页面。

  2. 预览器与模拟器差异:在预览器中,通过navDestination属性设置的页面可以正常跳转,但通过路由表配置的页面可能不会跳转,且预览器可能不会显示错误信息。建议在本地模拟器中进行Navigation开发的交互测试。

  3. 路由表配置:路由表JSON文件的后缀需为.json,文件名可自定义,便于区分和管理不同的路由配置。

  4. 页面名:在路由表中,页面名(name成员)可以使用中文字符串,这在进行多语言支持时尤为重要。

  5. NavRouter与NavDestination:NavRouter用于导航栏功能,点击时跳转到对应的NavDestination内容区。需确保NavRouter的第二个子组件为NavDestination。

如果在使用Navigation组件时遇到其他问题,建议检查官方文档及示例代码,确保组件的使用方式与官方推荐一致。若问题依旧无法解决,请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部