HarmonyOS 鸿蒙Next子窗口的页面能通过router跳转主窗口的页面

发布于 1周前 作者 bupafengyu 来自 鸿蒙OS

HarmonyOS 鸿蒙Next子窗口的页面能通过router跳转主窗口的页面

问题描述:

  1. 主页面A启动了子窗口,
  2. 子窗口的页面通过router跳转到B页面,会导致子窗口中的页面加载新的页面B
  3. 希望在子窗口中通过router跳转能使主窗口加载到B页面

4 回复

解决方案:

子窗口和主窗口是两个独立的路由栈,需要在子窗口中获取主窗口的路由栈之后进行跳转:

示例代码:

onWindowStageCreate(windowStage: window.WindowStage): void { 
  // Main window is created, set main page for this ability 
  hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onWindowStageCreate'); 
  AppStorage.setOrCreate<window.WindowStage>('stage',windowStage) 
  windowStage.loadContent('pages/Page', (err, data) => { 
    if (err.code) { 
      hilog.error(0x0000, 'testTag', 'Failed to load the content. Cause: %{public}s', JSON.stringify(err) ?? ''); 
      return; 
    } 
    hilog.info(0x0000, 'testTag', 'Succeeded in loading the content. Data: %{public}s', JSON.stringify(data) ?? ''); 
  }); 
}

用这个

this.windowStage.getMainWindowSync().getUIContext().getRouter().pushUrl({ url: "pages/routerPage" }, router.RouterMode.Single);

这个方式有问题,我在子窗口下获取的主窗口的路由栈和子窗口的路由栈是一样的

HarmonyOS 鸿蒙Next中,子窗口页面通过router跳转主窗口页面涉及两个独立的路由栈。这通常需要在子窗口中获取主窗口的路由栈信息,然后使用Router模块的API如pushUrlreplaceUrl进行跳转。具体实现需确保路由配置正确,并在合适的生命周期内执行跳转逻辑。如果子窗口无法直接访问主窗口的路由栈,可能需要设计间接的通信机制,如通过全局状态管理或事件总线来实现。如果问题依旧没法解决请加我微信,我的微信是itying888。

回到顶部