HarmonyOS 路由管理应该怎么做,有没有样例代码,是建议用router还是Navigation

HarmonyOS
2024-12-18 15:14:03
浏览
收藏 0
回答 1
回答 1
按赞同
/
按时间
fox280

推荐使用Navigation。RouterModule模块包含全局的路由栈和路由表信息。路由栈是NavPathStack对象,该对象与Entry.hap的Navigation组件绑定,RouterModule通过持有NavPathStack管理Navigation组件的路由信息。路由表builderMap是Map结构,以key-vaule的形式存储了需要路由的页面组件信息,其中key是自定义的唯一路由名,value是WrappedBuilder对象,该对象包裹了路由名对应的页面组件。RouterModule模块的实现主要包含以下步骤:

1.定义路由表和路由栈。
export class RouterModule {
  // WrappedBuilder支持@Builder描述的组件以参数的形式进行封装存储
  static builderMap: Map<string, WrappedBuilder<[object]>> = new Map<string, WrappedBuilder<[object]>>();
  // 初始化路由栈,需要关联Navigation组件
  static navPathStack: NavPathStack = new NavPathStack();
}
 
2. 路由表增加路由注册和路由获取方法,业务har模块通过路由注册方法将需要路由的页面组件委托给RouterModule管理。
export class RouterModule {
  // ...
  // 注册页面组件到路由表,builderName是路由名字,builder参数是包裹了页面组件的WrappedBuilder对象
  public static registerBuilder(builderName: string, builder: WrappedBuilder<[object]>): void {
    RouterModule.builderMap.set(builderName, builder);
  }

  // 获取路由表中指定的页面组件
  public static getBuilder(builderName: string): WrappedBuilder<[object]> {
    const builder = RouterModule.builderMap.get(builderName);
    if (!builder) {
      console.info('not found builder ' + builderName);
    }
    return builder as WrappedBuilder<[object]>;
  }
}
export class RouterModule {
  // ...
  // 通过获取页面栈跳转到指定页面
  public static async push(harName: string, builderName: string): Promise<void> {
    // 动态导入页面所在har模块,避免业务har模块中显示依赖其他har模块,实现按需加载
    await import(harName);
    // 通过路由栈的方法,按路由名字进行路由跳转
    RouterModule.navPathStack.pushPathByName(builderName, null);
  }
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
分享
微博
QQ
微信
回复
2024-12-18 18:22:20
相关问题
路由导航router还是navigation
355浏览 • 1回复 待解决
ETS实现语音视频通话,应该怎么做
4022浏览 • 1回复 待解决
是否有样代码
1654浏览 • 1回复 待解决
HarmonyOS Navigationrouter怎么
1027浏览 • 1回复 待解决
HarmonyOS router路由管理
618浏览 • 1回复 待解决
HarmonyOS任务派发怎么做
270浏览 • 0回复 待解决
HarmonyOS 怎么做图片合成?
321浏览 • 0回复 待解决
应用侧显示华为云mqtt数据怎么做
8036浏览 • 1回复 待解决
HarmonyOS 跨设备数据迁移怎么做
827浏览 • 1回复 待解决
HarmonyOS 图片怎么做高斯模糊效果
899浏览 • 1回复 待解决
后台录像需要怎么做呢?
5071浏览 • 1回复 待解决
fetch 怎么做超时处理?
1344浏览 • 1回复 待解决