HarmonyOS鸿蒙Next中Navigation弹窗关闭时在onPop回调中去弹窗新的Navigation弹窗
HarmonyOS鸿蒙Next中Navigation弹窗关闭时在onPop回调中去弹窗新的Navigation弹窗 Navigation 弹窗关闭时在onPop 回调中去弹窗新的Navigation弹窗时,会出现弹窗不会关闭。附件有效果视频
3 回复
原页面未出栈就把新页面压入栈中,导致出现了问题现象,可以在onpop方法中使用延迟入栈的方式来规避此问题:
import { Pages } from "../base/PageRouter";
@Component
export struct FirstPage {
@Consume("pathStack") pathStack: NavPathStack;
build() {
NavDestination() {
RelativeContainer() {
Column() {
Text("FirstPage").fontSize(50)
.fontWeight(FontWeight.Bold)
Button("SecondPage")
.onClick(() => {
this.pathStack.pushPath({
name: Pages.SECOND_PAGE,
onPop: (pop: PopInfo) => {
let result = pop.result
if (result == 1) {
setTimeout(() => {
this.pathStack.pushPath({ name: Pages.THIRD_PAGE })
}, 50)
}
}
})
.margin({ top: 100 })
}
.width("80%")
.height("50%")
.backgroundColor(Color.White)
.justifyContent(FlexAlign.Center)
.alignRules({
center: { anchor: '__container__', align: VerticalAlign.Center },
middle: { anchor: '__container__', align: HorizontalAlign.Center },
})
}.onClick(() => {
this.pathStack.pop();
})
.width('100%')
.height('auto')
}
.width('100%')
.height('100%')
.hideTitleBar(true)
.mode(NavDestinationMode.DIALOG)
.backgroundColor("#99000000")
}
}
更多关于HarmonyOS鸿蒙Next中Navigation弹窗关闭时在onPop回调中去弹窗新的Navigation弹窗的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
在HarmonyOS鸿蒙Next中,Navigation
组件的onPop
回调用于处理页面回退时的逻辑。若在onPop
回调中直接弹出新的Navigation
弹窗,可能会导致页面栈管理混乱或UI渲染异常。建议在onPop
回调中通过异步任务或延迟操作来处理新弹窗的弹出,以确保页面栈的稳定性和UI的正常渲染。
这是一个典型的弹窗生命周期管理问题。在HarmonyOS Next中,当在onPop回调中直接触发新弹窗时,由于前一个弹窗的关闭动画尚未完成,会导致新弹窗无法正常显示。
解决方案建议:
- 使用setTimeout或requestAnimationFrame延迟新弹窗的触发
- 考虑使用Promise或async/await确保前一个弹窗完全关闭
- 检查Navigation组件的z-index设置
示例代码:
onPop() {
setTimeout(() => {
// 在这里触发新弹窗
}, 100); // 适当延迟
}
或者使用Promise:
async onPop() {
await new Promise(resolve => setTimeout(resolve, 100));
// 触发新弹窗
}
注意调整延迟时间以适应动画时长。