HarmonyOS 鸿蒙Next router 与 navigation 的 replace api 的区别

HarmonyOS 鸿蒙Next router 与 navigation 的 replace api 的区别 需求如下: 一个hap 包含两个 har 分别是 harA 和 harB

harA 包含登录和注册功能,harB 包含主功能比如 主页 和 个人中心

启动显示 harA 的登录页面,点击注册 push 注册页面,点击登录,会跳转 harB 的主页,并销毁当前页面

harB 的个人中心有退出登录,跳转 harA 的登录页面,并销毁当前页面

router.repaceUrl 可以 销毁当前页面,但是用 navigation 的 replacePath 销毁不了当前页面

问题:① harA 跳转 harB 或者 harB 跳转 harA 业务场景(销毁当前页面)下,只能用 router.replaceUrl 吗?

② 在上述业务场景下,harA 或者 harB 在各自内部页面 push,是不是要在 harA 和 harB 有两个 navigation?


更多关于HarmonyOS 鸿蒙Next router 与 navigation 的 replace api 的区别的实战教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

针对第一个问题,路由跳转推荐使用Navigation 关键代码:

@Entry({ routeName: 'harA' })
@Component
export struct harA {
  @Provide('pageStack') pageStack: NavPathStack = new NavPathStack();
  @State data: string = '数据'

  @Builder
  pageMap(name: string) {

    if (name === 'harB') {

      harB()

    } else if (...) 
    {

      ...

    }

    build() {

      Navigation(this.pageStack) {

        Button('去HarB').onClick(() => {

          let pathInfo: NavPathInfo = new NavPathInfo('HarB', 'A到B的数据', (popInfo: PopInfo) => {

            //返回的数据
            this.data = popInfo.result as string

          })

          this.pageStack.pushDestination(pathInfo, true); //方式1跳转:
          this.pageStack.replacePath(pathInfo, true); //方式2跳转:这里HarA是Navigation承载了路由跳转的功能,所以即使使用replacePath还是会返回到HarA

        })

      }.navDestination(this.pageMap)

    }
  }
}

HarB中:

@Component
export struct HarB {
  @State message: string = 'Hello World';
  @Consume('pageStack') pageStack: NavPathStack;

  build() {

    NavDestination() {

      Text('HarB')

    }

    .onBackPressed(() => {

      const popDestinationInfo = this.pageStack.pop('b到A的数据', true)
      console.log('pop' + '返回值' + JSON.stringify(popDestinationInfo))
      return true

    })

    .onReady((cxt) => {

      console.log('②当NavDestination即将构建子组件之前会触发此回调')

    })

  }
}

对于第二个问题,可独立出一个Har包承载Navigation的跳转功能,这个Har不会随着页面的跳转被杀死,其他的页面跳转都依附于该Har包提供的Navigation能力进行跳转。

更多关于HarmonyOS 鸿蒙Next router 与 navigation 的 replace api 的区别的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


Next router是鸿蒙系统中用于页面跳转和路由管理的高级组件。它提供了更丰富的路由配置和跳转逻辑,允许开发者在应用中定义复杂的页面跳转关系。replace API则是navigation模块中的一个方法,用于在当前导航栈中替换当前页面,而不是简单地压栈或出栈。

具体来说,使用replace API时,当前页面会被新页面替换,用户无法再返回到被替换的页面。这种方式适用于那些不需要保留当前页面状态的场景,比如从登录页面跳转到主页时,通常不希望用户能够返回到登录页面。

而Next router则提供了更灵活的路由控制,它可以根据不同的条件跳转到不同的页面,并支持多种跳转方式(如推入、替换等)。此外,Next router还支持路由拦截、参数传递等高级功能,使得页面跳转更加灵活和可控。

总之,Next router和replace API都是鸿蒙系统中用于页面跳转的工具,但它们的功能和使用场景有所不同。开发者应根据具体需求选择合适的工具来实现页面跳转和路由管理。

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

回到顶部