@meng-xi/uni-router
Version:
为 uni-app 提供类似 vue-router 风格的路由
440 lines (420 loc) • 18.7 kB
TypeScript
/**
* 路由后置钩子函数
* @param to 已经进入的路由
* @param from 上一个路由
*/
declare type AfterEachHook = (to: Route, from: Route | null) => void;
/**
* 构建完整的 URL 字符串,根据传入的路径和查询参数生成最终的 URL
* @param path 路径字符串
* @param query 可选的查询参数对象,包含键值对,值的类型可以是字符串、数字或布尔值
* @returns 构建好的完整 URL 字符串
*/
export declare function buildUrl(path: string, query?: Record<string, string | number | boolean>): string;
/** 当前页面实例 */
declare interface CurrentPage {
/**
* 页面的参数选项,通常包含从上个页面传递过来的查询参数。
* 在小程序平台(如微信小程序、支付宝小程序等)中,该属性可直接获取页面参数。
* 该属性为可选属性,可能不存在。
*/
options?: Record<string, string>;
/**
* 页面的 Vue 实例,在 H5 和 App 平台可能会用到。
* 该属性为可选属性,可能不存在。
*/
$vm?: {
/**
* 在 H5 平台中,Vue 实例的路由信息对象。
* 包含页面的查询参数等路由相关信息。
* 该属性为可选属性,可能不存在。
*/
$route?: {
/**
* H5 平台中,页面的查询参数对象。
* 该属性为可选属性,可能不存在。
*/
query?: Record<string, string>;
};
/**
* 在 App 平台中,Vue 实例的小程序相关信息对象。
* 包含页面的查询参数等信息。
* 该属性为可选属性,可能不存在。
*/
$mp?: {
/**
* App 平台中,页面的查询参数对象。
* 该属性为可选属性,可能不存在。
*/
query?: Record<string, string>;
};
};
/**
* 当前页面的路由路径。
* 该属性为可选属性,可能不存在。
*/
route?: string;
}
/**
* 获取当前路由信息,根据传入的当前页面实例提取路由相关信息
* @param currentPage 当前页面实例,可能为 null
* @returns 当前路由对象,包含路径、完整路径和查询参数,若页面实例为 null 则返回 null
*/
export declare function getCurrentRoute(currentPage: CurrentPage | null): Route | null;
/** 路由链接组件的方法 */
declare interface MxRouterActionType {
setProps: (mxRouterProps: MxRouterProps) => Promise<void>;
}
/** 路由链接组件 Props */
declare interface MxRouterProps {
/** 路由地址 */
to: RouteLocationRaw;
/** 跳转方式 */
method?: 'push' | 'replace' | 'tab' | 'launch' | 'back' | 'exit';
/** 回退层数 */
delta?: number;
/** 窗口动画类型 */
animationType?: UniApp.NavigateToOptions['animationType'] & UniApp.NavigateBackOptions['animationType'];
/** 动画持续时间 */
animationDuration?: number;
/** 是否给 navigator 组件加一层 a 标签控制 ssr 渲染 */
renderLink?: boolean;
/** 指定点击时的样式类,当hover-class="none"时,没有点击态效果 */
hoverClass?: string;
/** 指定是否阻止本节点的祖先节点出现点击态 */
hoverStopPropagation?: boolean;
/** 按住后多久出现点击态,单位毫秒 */
hoverStartTime?: number;
/** 手指松开后点击态保留时间,单位毫秒 */
hoverStayTime?: number;
/** 在哪个小程序目标上发生跳转,默认当前小程序,值域self/miniProgram */
target?: 'miniProgram' | 'self';
}
/**
* 路由导航守卫函数
* @param to 即将进入的路由
* @param from 当前导航正要离开的路由
* @param next 调用该方法来 resolve 这个钩子
* @returns 可返回Promise或直接返回boolean/void
*/
declare type NavigationGuard = (to: Route, from: Route | null, next: NavigationGuardNextCallback) => Promise<boolean | void> | boolean | void;
/**
* 路由导航守卫函数的回调参数
* @param valid 导航是否有效,为false时取消导航,为字符串时重定向到指定路径,为RouteLocationRaw对象时进行路由跳转
*/
declare type NavigationGuardNextCallback = (valid?: boolean | string | RouteLocationRaw | void) => void;
/**
* 解析路由位置,将传入的路由位置信息转换为统一的路径和查询参数格式
* @param location 路由位置信息,可以是字符串类型的路径,也可以是包含路径和查询参数的对象
* @returns 解析后的路径和可选的查询参数对象,查询参数对象的键值对均为字符串类型
*/
export declare function parseLocation(location: RouteLocationRaw): {
path: string;
query?: Record<string, string>;
};
/** 当前路由信息 */
declare interface Route {
/** 路由路径 */
path: string;
/** 完整路径(包含查询参数) */
fullPath: string;
/** 解析后的查询参数对象 */
query: Record<string, string>;
}
/** 路由配置项接口 */
declare interface RouteConfig {
/** 路由路径 */
path: string;
/** 路由元信息,可存储任意自定义数据 */
meta?: Record<string, unknown>;
/** 子路由配置数组 */
children?: RouteConfig[];
}
/** 路由位置描述对象 */
declare interface RouteLocation {
/** 目标路径 */
path: string;
/** 查询参数对象 */
query?: Record<string, string | number | boolean>;
}
/** 路由位置描述,可以是字符串路径或RouteLocation对象 */
declare type RouteLocationRaw = string | RouteLocation;
/**
* uni-app 路由实现类,实现了 RouterInterface 接口,提供了一系列路由操作方法和守卫机制
* 支持单例模式调用和实例调用两种方式
*/
export declare class Router implements RouterInterface {
/**
* 单例实例,用于单例模式调用
* @private
* @static
* @type {Router | undefined}
*/
private static instance;
/**
* 路由配置列表,存储所有的路由配置信息
* @private
* @type {RouteConfig[]}
*/
private routes;
/**
* 全局前置守卫列表,在每次导航前依次执行
* @private
* @type {NavigationGuard[]}
*/
private beforeEachHooks;
/**
* 全局后置钩子列表,在每次导航成功后依次执行
* @private
* @type {AfterEachHook[]}
*/
private afterEachHooks;
/**
* 存储用户自定义的 getCurrentRoute 函数
* @private
* @type {(() => ReturnType<typeof getCurrentRouteUtil>) | undefined}
*/
private customGetCurrentRoute;
/**
* 构造函数,初始化 Router 实例
* 私有构造函数,防止外部直接实例化,保证单例模式的实现
* @param {RouterOptions} [options={}] - 路由配置选项,包含路由配置列表等信息,默认为空对象
*/
constructor(options?: RouterOptions);
/**
* 获取单例实例
* 首次获取实例时需要传入路由配置选项,后续获取使用之前的配置
* @static
* @param {RouterOptions} [options] - 路由配置选项
* @returns {Router} Router 实例
*/
static getInstance(options?: RouterOptions): Router;
/**
* 以推入新页面的方式进行路由导航 - 静态方法
* 通过单例实例调用实例方法实现路由导航
* @static
* @param {RouteLocationRaw} location - 目标路由位置信息,可以是字符串路径或包含路径和查询参数的对象
* @param {RouterOpenAnimation} [animation] - 窗口显示动画配置
* @returns {Promise<void>} 一个 Promise,导航成功时 resolve,失败时 reject
*/
static push(location: RouteLocationRaw, animation?: RouterOpenAnimation): Promise<void>;
/**
* 以推入新页面的方式进行路由导航 - 实例方法
* @param {RouteLocationRaw} location - 目标路由位置信息,可以是字符串路径或包含路径和查询参数的对象
* @param {RouterOpenAnimation} [animation] - 窗口显示动画配置
* @returns {Promise<void>} 一个 Promise,导航成功时 resolve,失败时 reject
*/
push(location: RouteLocationRaw, animation?: RouterOpenAnimation): Promise<void>;
/**
* 以替换当前页面的方式进行路由导航 - 静态方法
* 通过单例实例调用实例方法实现路由导航
* @static
* @param {RouteLocationRaw} location - 目标路由位置信息,可以是字符串路径或包含路径和查询参数的对象
* @returns {Promise<void>} 一个 Promise,导航成功时 resolve,失败时 reject
*/
static replace(location: RouteLocationRaw): Promise<void>;
/**
* 以替换当前页面的方式进行路由导航 - 实例方法
* @param {RouteLocationRaw} location - 目标路由位置信息,可以是字符串路径或包含路径和查询参数的对象
* @returns {Promise<void>} 一个 Promise,导航成功时 resolve,失败时 reject
*/
replace(location: RouteLocationRaw): Promise<void>;
/**
* 以重新启动应用的方式进行路由导航 - 静态方法
* 通过单例实例调用实例方法实现路由导航
* @static
* @param {RouteLocationRaw} location - 目标路由位置信息,可以是字符串路径或包含路径和查询参数的对象
* @returns {Promise<void>} 一个 Promise,导航成功时 resolve,失败时 reject
*/
static launch(location: RouteLocationRaw): Promise<void>;
/**
* 以重新启动应用的方式进行路由导航 - 实例方法
* @param {RouteLocationRaw} location - 目标路由位置信息,可以是字符串路径或包含路径和查询参数的对象
* @returns {Promise<void>} 一个 Promise,导航成功时 resolve,失败时 reject
*/
launch(location: RouteLocationRaw): Promise<void>;
/**
* 切换到指定的 tab 页面 - 静态方法
* 通过单例实例调用实例方法实现路由导航
* @static
* @param {RouteLocationRaw} location - 目标路由位置信息,可以是字符串路径或包含路径和查询参数的对象
* @returns {Promise<void>} 一个 Promise,导航成功时 resolve,失败时 reject
*/
static tab(location: RouteLocationRaw): Promise<void>;
/**
* 切换到指定的 tab 页面 - 实例方法
* @param {RouteLocationRaw} location - 目标路由位置信息,可以是字符串路径或包含路径和查询参数的对象
* @returns {Promise<void>} 一个 Promise,导航成功时 resolve,失败时 reject
*/
tab(location: RouteLocationRaw): Promise<void>;
/**
* 返回到指定层数的上一个页面 - 静态方法
* 通过单例实例调用实例方法实现页面返回
* @static
* @param {number} [delta=-1] - 要返回的页面层数,默认值为 -1,表示返回上一个页面
* @param {RouterCloseAnimation} [animation] - 窗口关闭动画配置
*/
static go(delta?: number, animation?: RouterCloseAnimation): void;
/**
* 返回到指定层数的上一个页面 - 实例方法
* 调用 uni-app 的 navigateBack 方法实现页面返回
* @param {number} [delta=-1] - 要返回的页面层数,默认值为 -1,表示返回上一个页面
* @param {RouterCloseAnimation} [animation] - 窗口关闭动画配置
*/
go(delta?: number, animation?: RouterCloseAnimation): void;
/**
* 返回到上一个页面,等同于调用 go(-1) - 静态方法
* 通过单例实例调用实例方法实现页面返回
* @static
* @param {RouterCloseAnimation} [animation] - 窗口关闭动画配置
*/
static back(animation?: RouterCloseAnimation): void;
/**
* 返回到上一个页面,等同于调用 go(-1) - 实例方法
* 调用 go 方法实现页面返回
* @param {RouterCloseAnimation} [animation] - 窗口关闭动画配置
*/
back(animation?: RouterCloseAnimation): void;
/**
* 添加全局前置守卫到守卫列表中 - 静态方法
* 通过单例实例调用实例方法添加全局前置守卫
* 这些守卫会在每次导航前依次执行
* @static
* @param {NavigationGuard} guard - 全局前置守卫函数
*/
static beforeEach(guard: NavigationGuard): void;
/**
* 添加全局前置守卫到守卫列表中 - 实例方法
* 将全局前置守卫函数添加到前置守卫列表中
* 这些守卫会在每次导航前依次执行
* @param {NavigationGuard} guard - 全局前置守卫函数
*/
beforeEach(guard: NavigationGuard): void;
/**
* 添加全局后置钩子到钩子列表中 - 静态方法
* 通过单例实例调用实例方法添加全局后置钩子
* 这些钩子会在每次导航成功后依次执行
* @static
* @param {AfterEachHook} hook - 全局后置钩子函数
*/
static afterEach(hook: AfterEachHook): void;
/**
* 添加全局后置钩子到钩子列表中 - 实例方法
* 将全局后置钩子函数添加到后置钩子列表中
* 这些钩子会在每次导航成功后依次执行
* @param {AfterEachHook} hook - 全局后置钩子函数
*/
afterEach(hook: AfterEachHook): void;
/**
* 设置自定义的 getCurrentRoute 函数
* @static
* @param {() => ReturnType<typeof getCurrentRouteUtil>} customFunction - 自定义的 getCurrentRoute 函数
*/
static setCustomGetCurrentRoute(customFunction: () => ReturnType<typeof getCurrentRoute>): void;
/**
* 设置自定义的 getCurrentRoute 函数
* @param {() => ReturnType<typeof getCurrentRouteUtil>} customFunction - 自定义的 getCurrentRoute 函数
*/
setCustomGetCurrentRoute(customFunction: () => ReturnType<typeof getCurrentRoute>): void;
/**
* 获取当前页面的路由信息 - 静态方法
* 通过单例实例调用实例方法获取当前页面的路由信息
* @static
* @returns {ReturnType<typeof getCurrentRouteUtil> | null} 当前页面的路由信息对象,如果获取失败则返回 null
*/
static getCurrentRoute(): ReturnType<typeof getCurrentRoute> | null;
/**
* 获取当前页面的路由信息 - 实例方法
* 优先使用用户自定义的 getCurrentRoute 函数,若未定义则使用默认实现
* @returns {ReturnType<typeof getCurrentRouteUtil> | null} 当前页面的路由信息对象,如果获取失败则返回 null
*/
getCurrentRoute(): ReturnType<typeof getCurrentRoute> | null;
/**
* 执行路由导航操作,包含前置守卫和后置钩子的处理
* @private
* @param {RouteLocationRaw} location - 目标路由位置信息,可以是字符串路径或包含路径和查询参数的对象
* @param {RouterMethod} method - 导航方法,如 'navigateTo'、'redirectTo' 等
* @param {RouterOpenAnimation} [animation] - 窗口显示动画配置
* @returns {Promise<void>} 一个 Promise,导航成功时 resolve,失败时 reject
*/
private navigate;
/**
* 执行单个全局前置守卫函数
* @private
* @param {NavigationGuard} guard - 全局前置守卫函数
* @param {any} to - 目标路由信息对象
* @param {any} from - 当前路由信息对象
* @returns {Promise<void>} 一个 Promise,守卫验证通过时 resolve,验证失败时 reject
*/
private runGuard;
/**
* 调用 uni-app 的路由方法进行导航
* @private
* @param {RouterMethod} method - 导航方法,如 'navigateTo'、'redirectTo' 等
* @param {string} url - 导航的目标 URL
* @param {RouterOpenAnimation} [animation] - 窗口显示动画配置
* @returns {Promise<void>} 一个 Promise,导航成功时 resolve,失败时 reject
*/
private callMxMethod;
}
/** 窗口关闭动画配置 */
declare interface RouterCloseAnimation {
/** 动画类型 */
type?: UniApp.NavigateBackOptions['animationType'];
/** 动画持续时间 */
duration?: number;
}
/** uni-app路由类接口 */
declare interface RouterInterface {
/** 跳转到指定页面(保留当前页面) */
push(location: RouteLocationRaw): Promise<void>;
/** 跳转到指定页面(关闭当前页面) */
replace(location: RouteLocationRaw): Promise<void>;
/** 跳转到指定页面(关闭所有页面) */
launch(location: RouteLocationRaw): Promise<void>;
/** 跳转到tabBar页面 */
tab(location: RouteLocationRaw): Promise<void>;
/** 返回指定页面数 */
go(delta?: number): void;
/** 返回上一页 */
back(): void;
/** 添加全局前置守卫 */
beforeEach(guard: NavigationGuard): void;
/** 添加全局后置钩子 */
afterEach(hook: AfterEachHook): void;
/** 获取当前路由信息 */
getCurrentRoute(): Route | null;
}
/** 窗口显示动画配置 */
declare interface RouterOpenAnimation {
/** 动画类型 */
type?: UniApp.NavigateToOptions['animationType'];
/** 动画持续时间 */
duration?: number;
}
/** 路由构造器选项 */
declare interface RouterOptions {
/** 路由配置数组 */
routes?: RouteConfig[];
/**
* 自定义获取当前路由的函数
* @returns 当前路由信息对象,如果获取失败则返回 null
*/
customGetCurrentRoute?: () => Route | null;
}
/**
* 使用 Router 组件的组合式函数,用于管理 Router 实例并提供操作方法
*
* @param routerProps - Router 组件的属性,用于配置路由跳转相关信息
*
* @returns 包含注册函数和操作方法的数组,第一个元素为注册函数,第二个元素为操作方法对象
*/
export declare function useMxRouter(routerProps: MxRouterProps): ({
/**
* 异步设置 Router 组件的属性
*
* @param routerProps - 要设置的 Router 组件属性
*/
setProps: (routerProps: MxRouterProps) => Promise<void>;
} | ((instance: MxRouterActionType) => void))[];
export { }