在NavDestination(){}.onReady里给this.pageStack赋值,在aboutToAppear里打印输出页面栈,页面栈列表为什么为空(前面已经跳转了几個NavDestination)? HarmonyOS 鸿蒙Next

在NavDestination(){}.onReady里给this.pageStack赋值,在aboutToAppear里打印输出页面栈,页面栈列表为什么为空(前面已经跳转了几個NavDestination)? HarmonyOS 鸿蒙Next

在NavDestination() {}.onReady里给this.pageStack赋值:

NavDestination() {}.onReady((context: NavDestinationContext) => {
  this.pageStack = context.pathStack
})

在aboutToAppear里打印页面栈:

aboutToAppear(): void {
  console.log('获取栈中所有NavDestination页面的名称', JSON.stringify(this.pageStack.getAllPathName()))
}

结果是空数组:

获取栈中所有NavDestination页面的名称 []

更多关于在NavDestination(){}.onReady里给this.pageStack赋值,在aboutToAppear里打印输出页面栈,页面栈列表为什么为空(前面已经跳转了几個NavDestination)? HarmonyOS 鸿蒙Next的实战教程也可以访问 https://www.itying.com/category-93-b0.html

3 回复

不知道这样是否可以解决你的问题:

在Navigation先存pathStack

pathStack: NavPathStack = new NavPathStack();

aboutToAppear(): void {
  AppStorage.setOrCreate("PathStack", this.pathStack)
}

Navigation(this.pathStack)

在NavDestination直接取

pathStack: NavPathStack = AppStorage.get("PathStack") as NavPathStack
aboutToAppear(): void {
  console.log('获取栈中所有NavDestination页面的名称', JSON.stringify(this.pageStack.getAllPathName()))
}

更多关于在NavDestination(){}.onReady里给this.pageStack赋值,在aboutToAppear里打印输出页面栈,页面栈列表为什么为空(前面已经跳转了几個NavDestination)? HarmonyOS 鸿蒙Next的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


生命周期问题吧

1. 第一次显示时,先走aboutToAppear,打印出来是空的,下来才走onReady

2. 之后显示时,没有再走aboutToAppear回调了。

或者你把完整代码贴出来,包含pageStack变量的定义。

在HarmonyOS中,NavDestinationonReady回调是在目标页面准备就绪时触发的,而aboutToAppear是在页面即将显示时触发的。你提到在onReady中给this.pageStack赋值,但在aboutToAppear中打印页面栈时发现为空。可能的原因是页面栈的更新是异步的,onReady回调时页面栈还未完全更新,导致在aboutToAppear中打印时页面栈仍为空。此外,页面栈的管理可能受到页面生命周期和导航机制的影响,确保在正确的生命周期阶段访问页面栈。

回到顶部