业务路由
介绍
业务路由模块(biz_navigation)封装各业务模块的导航器,提供类型安全的跳转方法。它基于 core/navigation 的框架能力,为业务层提供便捷的路由调用。
与 core/navigation 的区别
| 模块 | 内容 | 示例 |
|---|---|---|
| core/navigation | 导航框架能力,与业务无关 | RouteBuild、RouteGraph、NavigationService |
| foundation/biz_navigation | 业务路由封装 | AuthNavigator、DemoNavigator、业务参数/结果类型 |
Navigator 示例
文件位置:foundation/biz_navigation/src/main/ets/demo/DemoNavigator.ets
ts
import { navigateTo, navigateToForResult } from "../BusinessNavigationService";
import { DemoRoutes } from "./DemoRoutes";
import type { DemoResult } from "./DemoResult";
/**
* @file Demo 模块导航封装
*/
export class DemoNavigator {
/**
* 跳转到网络请求示例页
*/
static toNetworkDemo(): void {
navigateTo(DemoRoutes.NetworkDemo);
}
/**
* 跳转到带参示例页
*/
static toNavigationWithArgs(goodsId: number, goodsName: Resource): void {
navigateTo(DemoRoutes.NavigationWithArgs, { goodsId, goodsName });
}
/**
* 跳转到结果回传示例页
*/
static toNavigationResult(): Promise<DemoResult | undefined> {
return navigateToForResult<DemoResult>(DemoRoutes.NavigationResult);
}
}参数与结果类型
参数类型
文件位置:foundation/biz_navigation/src/main/ets/user/UserParam.ets
ts
/**
* 用户地址详情参数
*/
export interface UserAddressDetailParam {
addressId: string;
}
/**
* 用户地址列表参数
*/
export interface UserAddressListParam {
selectMode?: boolean;
}结果类型
文件位置:foundation/biz_navigation/src/main/ets/demo/DemoResult.ets
ts
/**
* Demo 结果回传对象
*/
export interface DemoResult {
title: string;
description: string;
}使用示例
在 ViewModel 中使用
ts
import { DemoNavigator } from "@foundation/biz-navigation";
@ObservedV2
export default class MainViewModel extends BaseViewModel {
/**
* 跳转到网络示例
*/
goToNetworkDemo(): void {
DemoNavigator.toNetworkDemo();
}
/**
* 跳转并获取结果
*/
async goToResultDemo(): Promise<void> {
const result = await DemoNavigator.toNavigationResult();
if (result) {
console.log(result.title);
}
}
}如何新增业务路由
- 在
foundation/biz_navigation/src/main/ets/下创建模块目录。 - 创建
*Navigator.ets封装跳转方法。 - 如有参数,创建
*Param.ets定义参数类型。 - 如有返回值,创建
*Result.ets定义结果类型。 - 在
Index.ets中导出。
注意事项
- 统一用 Navigator 封装跳转,避免业务层直接拼路由名。
- 所有路由参数与返回结果都用实体类型描述,避免
any。 - Navigator 只做跳转封装,不写业务逻辑。