HarmonyOS 开发——Navigation常见场景&解决方案

路由跳转场景

页面跳转是路由最常用的能力,Navigation通过NavPathStack提供了诸多方法,下文以pushDestination方法为例,介绍Navigation的路由跳转相关能力。

页面间跳转

NavPathStack提供了路由管理的能力,通过NavPathStack进行页面跳转,主要适用于页面较多的应用。

Step1:创建NavPathStack对象pageStack,通常使用@Provide进行修饰,方便后续子组件通过@Comsumer获取,以实现子页面的路由跳转。

也可以将pageStack传入路由框架,以实现路由框架开发的开发。

@Entry 
@Component 
struct mainPageView { 
  @Provide('pageStack') pageStack: NavPathStack = new NavPathStack() 
  ... 
  build() { 
    ... 
  } 
}

Step2:构建路由表pageMap,该方法通过@Builder进行修饰,通过传入的pageName属性,返回不同页面。

@Entry 
@Component 
struct mainPageView { 
  @Provide('pageStack') pageStack: NavPathStack = new NavPathStack() 
  @Builder 
  PageMap(pageName: string) { 
    if (pageName === 'loginPage') { 
      loginPageView() 
    } else if (pageName === 'mainPage') { 
      mainPageView() 
    } 
  } 
  build() { 
    ... 
  } 
}

Step3:在build创建Navigation组件(需要传入pageStack参数),通过navDestination属性传入路由表pageMap,并通过pageStack.pushPath()实现页面跳转。 

@Entry 
@Component 
struct mainPageView { 
  @Provide('pageStack') pageStack: NavPathStack = new NavPathStack() 
  @Builder 
  pageMap(pageName: string) { 
    if (pageName === 'loginPage') { 
      loginPageView() 
    } else if (pageName === 'mainPage') { 
      mainPageView() 
    } 
  } 
  build() { 
    Navigation(this.pageStack){ 
      ... 
      Button('login').onClick( ent => { 
        let pathInfo : NavPathInfo = new NavPathInfo('loginPage', null) 
        this.pageStack.pushDestination(pathInfo, true); 
      }) 
    }.navDestination(this.pageMap) 
    ... 
  } 
}
页面间参数传递

Navigation的页面间,通过NavPathInfo对象中的params属性,实现从发起页到目标页的数据传递;通过onPop回调参数,实现处理目标页面的返回。

Step1:构建NavPathInfo对象,输入需要传递给目标页面的参数。

params参数:将需要传递的数据封装起来进行传递,无法传递对象里面的函数。具体的支持参数可以参考指南()

onPop参数:目标页面触发pop时的返回,在回调中通过PopInfo.info.param获取到返回的对象。

// 发起页 mainPage 
let loginParam : LoginParam = new LoginParam() 
// 构建pathInfo对象 
let pathInfo : NavPathInfo = new NavPathInfo('loginPage', loginParam 
  , (popInfo: PopInfo) => { 
    let loginParam : LoginParam = popInfo.info.param as LoginParam; 
  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值