HarmonyOS 鸿蒙Next Navigation问题

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

HarmonyOS 鸿蒙Next Navigation问题

Navigation做页面跳转,官方说使用pageStack.getParamByName获取传参,假如要跳转的是个通用的工具页,好多页面都会跳,这种情况该怎么处理呢?

感觉逻辑都耦合进去了

5 回复
// PageOne.ets
class TmpClass{
  count:number=10
}

@Builder export function PageOneBuilder(name: string, param: Object) { PageOne() }

@Component export struct PageOne {

pageInfos: NavPathStack = new NavPathStack()

build() { NavDestination() { Column() { Button(‘pushPathByName’, { stateEffect: true, type: ButtonType.Capsule }) .width(‘80%’) .height(40) .margin(20) .onClick(() => { let tmp = new TmpClass() this.pageInfos.pushPathByName(‘pageTwo’, tmp) //将name指定的NavDestination页面信息入栈,传递的数据为param }) Button(‘singletonLaunchMode’, { stateEffect: true, type: ButtonType.Capsule }) .width(‘80%’) .height(40) .margin(20) .onClick(() => { this.pageInfos.pushPath({ name: ‘pageOne’ }, { launchMode: LaunchMode.MOVE_TO_TOP_SINGLETON }) //从栈底向栈顶查找,如果指定的名称已经存在,则将对应的NavDestination页面移到栈顶 }) Button(‘popToname’, { stateEffect: true, type: ButtonType.Capsule }) .width(‘80%’) .height(40) .margin(20) .onClick(() => { this.pageInfos.popToName(‘pageTwo’) //回退路由栈到第一个名为name的NavDestination页面 console.log(‘popToName’ + JSON.stringify(this.pageInfos), ‘返回值’ + JSON.stringify(this.pageInfos.popToName(‘pageTwo’))) }) Button(‘popToIndex’, { stateEffect: true, type: ButtonType.Capsule }) .width(‘80%’) .height(40) .margin(20) .onClick(() => { this.pageInfos.popToIndex(1) // 回退路由栈到index指定的NavDestination页面 console.log(‘popToIndex’ + JSON.stringify(this.pageInfos)) }) Button(‘moveToTop’, { stateEffect: true, type: ButtonType.Capsule }) .width(‘80%’) .height(40) .margin(20) .onClick(() => { this.pageInfos.moveToTop(‘pageTwo’) // 将第一个名为name的NavDestination页面移到栈顶 console.log(‘moveToTop’ + JSON.stringify(this.pageInfos), ‘返回值’ + JSON.stringify(this.pageInfos.moveToTop(‘pageTwo’))) }) Button(‘moveIndexToTop’, { stateEffect: true, type: ButtonType.Capsule }) .width(‘80%’) .height(40) .margin(20) .onClick(() => { this.pageInfos.moveIndexToTop(1) // 将index指定的NavDestination页面移到栈顶 console.log(‘moveIndexToTop’ + JSON.stringify(this.pageInfos)) }) Button(‘clear’, { stateEffect: true, type: ButtonType.Capsule }) .width(‘80%’) .height(40) .margin(20) .onClick(() => { this.pageInfos.clear() //清除栈中所有页面 }) Button(‘get’, { stateEffect: true, type: ButtonType.Capsule }) .width(‘80%’) .height(40) .margin(20) .onClick(() => { console.log(’-------------------’) console.log(‘获取栈中所有NavDestination页面的名称’, JSON.stringify(this.pageInfos.getAllPathName())) console.log(‘获取index指定的NavDestination页面的参数信息’, JSON.stringify(this.pageInfos.getParamByIndex(1))) console.log(‘获取全部名为name的NavDestination页面的参数信息’, JSON.stringify(this.pageInfos.getParamByName(‘pageTwo’))) console.log(‘获取全部名为name的NavDestination页面的位置索引’, JSON.stringify(this.pageInfos.getIndexByName(‘pageOne’))) console.log(‘获取栈大小’, JSON.stringify(this.pageInfos.size())) }) }.width(‘100%’).height(‘100%’) }.title(‘pageOne’) .onBackPressed(() => { const popDestinationInfo = this.pageInfos.pop() // 弹出路由栈栈顶元素 console.log(‘pop’ + ‘返回值’ + JSON.stringify(popDestinationInfo)) return true }).onReady((context: NavDestinationContext) => { this.pageInfos = context.pathStack }) } }

意思是不同页面往通用工具页跳转会传不同的参数吗,不同的只是参数值为什么会有耦合的问题?

参数定义是一样的,我是想问通过哪个api获取传参 比如我项目里有A、B、C三个页面都会携带参数跳转D(图片裁剪页),图片裁剪页需要获取传过来的参数,那通过什么API来获取参数呢? 因为我并不知道是A还是B或者C触发的跳转,通过pageStack.getParamByName获取显然不适合 ,通过pageStack.getParamByIndex好像也不行

getParamByName是获取全部名为name的NavDestination页面的参数信息。跟从哪个页面跳的没关系,name指的就是D页面的name

针对您提出的HarmonyOS 鸿蒙Next Navigation问题,以下是一些专业解答:

HarmonyOS鸿蒙Next中的Navigation组件是路由容器组件,一般作为首页的根容器,支持单栏(Stack)、分栏(Split)和自适应(Auto)三种显示模式。它适用于模块内和跨模块的路由切换,通过组件级路由能力实现更流畅的转场体验。

在使用Navigation组件时,如果遇到问题,建议首先检查以下几点:

  • 确保Navigation组件的属性设置正确,包括显示模式(mode)、标题栏模式(titleMode)等。
  • 确认页面结构是否符合Navigation组件的要求,导航页(NavBar)和子页(NavDestination)是否配置正确。
  • 路由配置(如route_map.json)是否准确,确保子页已在系统配置文件中正确配置。

如果上述检查均无问题,但Navigation组件仍无法正常工作,可能是由于系统版本或特定环境下的兼容性问题。此时,建议查阅HarmonyOS的最新开发文档或更新系统至最新版本,以获取最新的组件支持和修复。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部