在HarmonyOS NEXT开发中是否有完整的自定义路由表和动态路由demo可以提供一下?

在HarmonyOS NEXT开发中是否有完整的自定义路由表和动态路由demo可以提供一下?

阅读 809
avatarAI BotBETA

在HarmonyOS NEXT开发中,存在自定义路由表和动态路由的示例。以下是一些关键信息和示例代码:

自定义路由表示例

对于自定义路由表,通常需要在module.json5文件中配置路由表文件指引,并在resources/base/profile目录下创建route_map.json文件以定义页面路由信息。每个页面对应的Builder函数名需与route_map.json中的buildFunction字段一致。使用pushPathByName等路由接口进行页面跳转。

动态路由示例

实现思路

  1. 初始化动态路由

    public static routerInit(config: RouterConfig, context: Context) {
        DynamicsRouter.config = config;
        DynamicsRouter.appRouterStack.push(HOME_PAGE);
        RouterLoader.load(config.mapPath, DynamicsRouter.routerMap, context);
    }
  2. 注册WrappedBuilder对象:用于动态创建页面。

    private static registerBuilder(builderName: string, builder: WrappedBuilder<[object]>): void {
        DynamicsRouter.builderMap.set(builderName, builder);
    }
  3. 通过页面栈跳转到指定页面

    public static async push(routerInfo: RouterInfo, param?: string): Promise<void> {
        const pageName: string = routerInfo.pageName;
        const moduleName: string = routerInfo.moduleName;
        let isImportSucceed: boolean = false;
        await import(moduleName).then((result: ESObject) => {
            result.harInit(pageName);
            isImportSucceed = true;
        }, (error: ESObject) => {
            logger.error(LOGGER_TAG, error);
        });
        if (isImportSucceed) {
            const builderName: string = moduleName + "/" + pageName;
            DynamicsRouter.getNavPathStack().pushPath({ name: builderName, param: param });
        }
    }
  4. 注册动态路由跳转的页面信息

    public static registerRouterPage(routerInfo: RouterInfo, wrapBuilder: WrappedBuilder<[object]>): void {
        let builderName: string = routerInfo.moduleName + "/" + routerInfo.pageName;
        if (!DynamicsRouter.getBuilder(builderName)) {
            DynamicsRouter.registerBuilder(builderName, wrapBuilder);
        }
    }

使用说明

  1. 在工程的hvigor/hvigor-config.json5中配置插件。
  2. 在工程的根目录的build-profile.json5中添加动态路由模块和需要加载的子模块的依赖。
  3. 在主模块中添加动态路由和需要加载的子模块的依赖。
  4. 在主模块中初始化动态路由。

例如,在主模块的EntryAbilityonCreate接口中初始化动态路由:

onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {
    DynamicsRouter.routerInit({ libPrefix: "@ohos", mapPath: "routerMap" }, this.context);
}

Demo 提供

由于具体的Demo代码可能较为冗长且涉及多个文件,这里无法直接提供完整的Demo。但上述示例代码已经涵盖了自定义路由表和动态路由的关键部分,开发者可以根据这些示例代码搭建自己的Demo环境,并进一步实现和完善功能。

如需获取更详细的Demo或示例代码,建议参考HarmonyOS NEXT的官方文档或社区资源。