HarmonyOS鸿蒙Next中Navigation界面A跳转NavDestination界面B,A所持有的CustomDialogController还会显示,想要通过levelMode和levelUniqueId控制只显示在A界面如何实现呢?

HarmonyOS鸿蒙Next中Navigation界面A跳转NavDestination界面B,A所持有的CustomDialogController还会显示,想要通过levelMode和levelUniqueId控制只显示在A界面如何实现呢?

目前我设置这两个参数无效

cke_186.png


更多关于HarmonyOS鸿蒙Next中Navigation界面A跳转NavDestination界面B,A所持有的CustomDialogController还会显示,想要通过levelMode和levelUniqueId控制只显示在A界面如何实现呢?的实战教程也可以访问 https://www.itying.com/category-93-b0.html

5 回复

利用生命周期组件aboutToDisappear主动关闭弹窗行不行?

@Component
struct PageA {
  dialogController: CustomDialogController = new CustomDialogController(...);
  
  aboutToDisappear() { //页面消失时关闭弹窗
    this.dialogController.close();
  }
}

更多关于HarmonyOS鸿蒙Next中Navigation界面A跳转NavDestination界面B,A所持有的CustomDialogController还会显示,想要通过levelMode和levelUniqueId控制只显示在A界面如何实现呢?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


  1. 你想要控制弹窗只是在A页面弹出的话可以在A页面消失或者隐藏的时候关闭,A页面显示的时候再打开这个弹窗,可以参考页面切换来处理不同的页面变化: [@ohos.arkui.observer (无感监听)-UI界面-ArkTS API-ArkUI(方舟UI框架)-应用框架 - 华为HarmonyOS开发者](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/js-apis-arkui-observer#uiobserveronnavdestinationswitch12)

  2. 这个弹窗一定是绑定在某个页面的那你就使用模态弹窗来处理 半模态转场-模态转场设置-通用属性-ArkTS组件-ArkUI(方舟UI框架)-应用框架 - 华为HarmonyOS开发者

您好:当前,ArkUI弹出框默认为非页面级弹出框,在页面路由跳转时,如果开发者未调用close方法将其关闭,弹出框将不会自动关闭。若需实现在跳转页面时覆盖弹出框的场景,可以使用组件导航子页面显示类型的弹窗类型或者页面级弹出框

谢谢!

在鸿蒙Next中,要实现CustomDialogController只在界面A显示,可以使用levelModelevelUniqueId控制。在界面A的CustomDialogController构造函数中设置levelModeDialogLevelMode.SINGLE,并指定唯一的levelUniqueId。当从界面A跳转到界面B时,对话框会自动隐藏。在界面A的aboutToAppear()中调用dialogController.show(),在界面A的aboutToDisappear()中调用dialogController.hide()。这样对话框将仅在界面A显示。

在HarmonyOS Next中,要控制CustomDialogController只在特定页面显示,可以通过以下方式实现:

  1. 确保在页面A中正确设置了levelMode和levelUniqueId:
let customDialogController = new CustomDialogController({
  builder: yourCustomDialogComponent,
  levelMode: DialogLevelMode.LEVEL_BASE,
  levelUniqueId: "pageA_unique_id" // 使用页面A的唯一标识
});
  1. 在页面B中创建CustomDialogController时使用不同的levelUniqueId:
let customDialogController = new CustomDialogController({
  builder: yourCustomDialogComponent,
  levelMode: DialogLevelMode.LEVEL_BASE,
  levelUniqueId: "pageB_unique_id" // 使用页面B的唯一标识
});
  1. 确保在页面A的aboutToDisappear()生命周期中关闭对话框:
aboutToDisappear() {
  if(this.customDialogController.isOpen()) {
    this.customDialogController.close();
  }
}

如果仍然无效,请检查:

  1. Navigation跳转时是否使用了正确的路由方式
  2. 确保两个页面的levelUniqueId确实不同
  3. 检查CustomDialogController是否被正确绑定到页面生命周期,
回到顶部