HarmonyOS 鸿蒙Next 跳转页面时router和Navigation混用有方案实现吗

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

HarmonyOS 鸿蒙Next 跳转页面时router和Navigation混用有方案实现吗

我们有个应用整体页面跳转使用的是Navigation封装的路由,但是有一些基础库封装的页面使用router跳转,目前发现router和Navigation混用的时候Navigation跳转的新页面不显示(Navigation->NavDestination->router page1->NavDestination2),这时候NavDestination2不显示,大家知不知道合适的处理方案啊?


更多关于HarmonyOS 鸿蒙Next 跳转页面时router和Navigation混用有方案实现吗的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

需要在router跳转到的页面使用Navigation组件重新开启新的Navigation。可参考以下demo:

深色代码主题
复制
//index.ets (在main_page.json中注册)
@Entry
@Component
struct Index {
  pageInfo: NavPathStack = new NavPathStack()
  build() {
    Navigation(this.pageInfo) {
      Column() {
        Button('StartTest', { stateEffect: true, type: ButtonType.Capsule })
          .width('80%')
          .height(40)
          .margin(20)
          .onClick(() => {
            this.pageInfo.pushPath({ name: 'pageOne' })
          })
      }
    }.title('NavIndex')
  }
}

//PageOne.ets (需要注册routermap) import { router } from ‘@kit.ArkUI’; @Builder export function PageOneBuilder(name: string, param: Object) { PageOne() } @Component struct PageOne { pageInfo: NavPathStack = new NavPathStack(); @State message: string = ‘pageOne’ aboutToAppear(): void {

} build() { NavDestination() { Text(this.message) .width(‘80%’) .height(50) .margin(10) Button(‘pushPath’, { stateEffect: true, type: ButtonType.Capsule }) .width(‘80%’) .height(40) .margin(10) .onClick(()=>{ //使用router跳转到下一个页面 router.pushUrl({ url:“pages/PageRouterOne” }) }) } .height(‘100%’) .width(‘100%’) } }

//PageRouterOne.ets (在main_page.json中注册) @Entry @Component struct PageRouterOne { pageInfo: NavPathStack = new NavPathStack(); @State message: string = ‘Hello World’; build() { Navigation(this.pageInfo) { Text(this.message) .id(‘PageRouterOneHelloWorld’) .fontSize(50) .fontWeight(FontWeight.Bold) .alignRules({ center: { anchor: ‘container’, align: VerticalAlign.Center }, middle: { anchor: ‘container’, align: HorizontalAlign.Center } }) Button(“看看下面”).onClick(()=>{ this.pageInfo.pushPath({name:“pageTwo”}) }) } .height(‘100%’) .width(‘100%’) } }

//PageTwo.ets(需要注册routermap) @Builder export function PageTwoBuilder(name: string, param: Object) { PageOne() } @Component struct PageOne { pageInfo: NavPathStack = new NavPathStack(); @State message: string = ‘pageTwo’ build() { NavDestination() { Text(this.message) .width(‘80%’) .height(50) .margin(10) Button(‘pushPath’, { stateEffect: true, type: ButtonType.Capsule }) .width(‘80%’) .height(40) .margin(10) } .height(‘100%’) .width(‘100%’) } }

//router_map.json { “routerMap”: [ { “name”: “pageOne”, “pageSourceFile”: “src/main/ets/pages/PageOne.ets”, “buildFunction”: “PageOneBuilder”, “data”: { “description”: “this is pageOne” } }, { “name”: “pageTwo”, “pageSourceFile”: “src/main/ets/pages/PageTwo.ets”, “buildFunction”: “PageTwoBuilder” } ] }

更多关于HarmonyOS 鸿蒙Next 跳转页面时router和Navigation混用有方案实现吗的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next中,实现页面跳转时router和Navigation混用是可行的,但需要通过特定的方式进行集成和配置。

HarmonyOS提供了丰富的页面跳转机制,包括基于路由(Router)的跳转和基于导航(Navigation)的跳转。为了混用这两种方式,你需要:

  1. 定义路由表:首先,在应用的路由表中定义所有可用的页面路由。这确保了无论是通过Router还是Navigation方式,都能正确识别目标页面。

  2. 使用统一的跳转接口:在应用中封装一个统一的页面跳转接口,该接口根据传入的参数(如目标页面标识符、携带的数据等)决定使用Router还是Navigation进行跳转。

  3. 处理页面回退:由于Router和Navigation的页面栈管理机制不同,混用时需要特别注意页面回退的处理。确保在回退时能够正确识别并处理来自不同跳转方式的页面。

  4. 测试与调试:在混用Router和Navigation进行页面跳转时,务必进行充分的测试与调试,以确保跳转逻辑的正确性和稳定性。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html。

回到顶部