HarmonyOS 鸿蒙Next子窗口的页面能通过router跳转主窗口的页面
HarmonyOS 鸿蒙Next子窗口的页面能通过router跳转主窗口的页面
问题描述:
- 主页面A启动了子窗口,
- 子窗口的页面通过router跳转到B页面,会导致子窗口中的页面加载新的页面B,
- 希望在子窗口中通过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如pushUrl
或replaceUrl
进行跳转。具体实现需确保路由配置正确,并在合适的生命周期内执行跳转逻辑。如果子窗口无法直接访问主窗口的路由栈,可能需要设计间接的通信机制,如通过全局状态管理或事件总线来实现。如果问题依旧没法解决请加我微信,我的微信是itying888。