鸿蒙Navigation组件使用系统路由表

前景:

这个项目是需要使用Navigation,但是官网的自定义路由表过于复杂,所以选择使用系统路由表,但是在使用过程中发现在feature层跨包使用的时候会报空指针错误

解决方案

1.将NavPathStack抽到公共层,封装成一个类

2.在页面的aboutToAppear中调用封装

实现步骤:
* 1.将主模块的NavPathStack传入createRouter接口,注册路由
* 2.通过registerBuilder接口,将需要动态加载的模块注册到路由中 (动态路由内容)
* 3.通过push接口,跳转到指定的模块页面

封装代码

/**
 *
 * 实现步骤:
 * 1.将主模块的NavPathStack传入createRouter接口,注册路由
 * 2.通过registerBuilder接口,将需要动态加载的模块注册到路由中 (动态路由内容)
 * 3.通过push接口,跳转到指定的模块页面
 */

export class DynamicsRouter {
  static navPathStack: NavPathStack = new NavPathStack();

  // 注册router
  public static createRouter(router: NavPathStack): void {
    DynamicsRouter.navPathStack = router;
  }


  // 通过名称获取router
  public static getRouter(): NavPathStack | undefined {
    let router = DynamicsRouter.navPathStack;
    return router as NavPathStack;
  }

  /**
   * 通过获取页面栈跳转到指定页面
   */
  public static async push(name: string, param: string, animated: boolean = false): Promise<void> {
    DynamicsRouter.getRouter()?.pushPath({ name: name, param: param }, animated);
  }


  public static async replace(name: string, param: string, animated: boolean = false): Promise<void> {
    // 查找到对应的路由栈进行跳转
    DynamicsRouter.getRouter()?.replacePathByName(name, param, animated);
  }

  // 通过获取页面栈并pop
  public static pop(): void {
    // 查找到对应的路由栈进行pop
    DynamicsRouter.getRouter()?.pop();
  }
}

调用代码:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值