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

HarmonyOS
10h前
浏览
收藏 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);
  }
}
分享
微博
QQ
微信
回复
7h前
相关问题
ETS实现语音视频通话,应该怎么做
3239浏览 • 1回复 待解决
是否有样代码
929浏览 • 1回复 待解决
HarmonyOS Navigationrouter怎么
0浏览 • 0回复 待解决
后台录像需要怎么做呢?
4076浏览 • 1回复 待解决
应用侧显示华为云mqtt数据怎么做
7041浏览 • 1回复 待解决
fetch 怎么做超时处理?
512浏览 • 1回复 待解决
三表连表查询+groupby怎么做
2114浏览 • 1回复 待解决
在vue里怎么做环境的判断?
196浏览 • 1回复 待解决