Q:如何使用Navigation的navPathStack参数?
A:在已通过navPathStack获取到NavDestination集合后,可通过以下方法查询参数:
参考链接:NavPathStack。
Q:Navigation设置了隐藏属性,仍然出现空白导航栏,跳转至新页面后,导航栏会重新出现,如何解决?
A:需同时设置Navigation组件及其NavDestination子组件的hideTitleBar属性为true才能完全隐藏导航栏。
参考链接:Navigation。
Q:如何在Navigation跳转页面时返回传参?
A:在页面跳转时使用pushPath(),添加onPop回调接收入栈页面出栈时的返回结果。当页面返回时,通过pop()设置result参数并传递给目标页面,由onPop回调接收返回参数。示例代码如下:
interface paramType {
param: string
}
let paramA: paramType = {
param: 'test1'
}
@Entry
@Component
struct Index {
@Provide('pathInfos') pathInfos: NavPathStack = new NavPathStack();
@Builder
myRouter(name: string) {
if (name === 'MyFirstNavDestination') {
MyFirstNavDestination()
} else if (name === 'MySecondNavDestination') {
MySecondNavDestination()
}
}
build() {
Navigation(this.pathInfos) {
Row() {
Column() {
Text('hello world')
}
.height('100%')
}
.onClick(() => {
this.pathInfos.pushPathByName('MyFirstNavDestination', paramA);
})
}
.navDestination(this.myRouter)
}
}
@Component
export struct MyFirstNavDestination {
@Consume('pathInfos') pathInfos: NavPathStack;
getParamsPrint() {
console.info('param is ' + JSON.stringify(this.pathInfos.getParamByName('MyFirstNavDestination')));
}
build() {
NavDestination() {
Row() {
Column() {
Text('MyFirstNavDestination')
}
.width('100%')
}
.height('100%')
.onClick(() => {
this.pathInfos.pushPath({
name: 'MySecondNavDestination', param: null, onPop: (popInfo: PopInfo) => {
console.info(`[pushPath]last page is: ${popInfo.info.name},result: ${JSON.stringify(popInfo.result)}`);
}
});
})
}.onShown(() => {
this.getParamsPrint();
})
}
}
@Component
export struct MySecondNavDestination {
@Consume('pathInfos') pathInfos: NavPathStack;
private routerParams: paramType = { param: 'test 2' };
build() {
NavDestination() {
Row() {
Text('MySecondNavDestination')
}
.height('100%')
}.onBackPressed(() => {
this.pathInfos.pop(this.routerParams);
return true;
})
}
}