HarmonyOS 鸿蒙Next Navigation问题
HarmonyOS 鸿蒙Next Navigation问题
Navigation做页面跳转,官方说使用pageStack.getParamByName获取传参,假如要跳转的是个通用的工具页,好多页面都会跳,这种情况该怎么处理呢?
感觉逻辑都耦合进去了
// 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