@meng-xi/uni-router

@meng-xi/uni-router 是一个专为 uni-app 开发的路由管理库,采用类似 vue-router 的设计风格,并提供丰富的工具函数,帮助开发者轻松实现跨平台路由管理。

npm包地址 github地址

核心功能

  • vue-router API :与 vue-router 相似的 API 设计,学习成本低,迁移简单
  • 多种导航方式
    • push:保留当前页面的跳转
    • replace:替换当前页面
    • launch:重启应用并跳转
    • tab:切换 tabBar 页面
    • go/back:页面返回控制
  • 路由守卫
    • beforeEach:导航前执行(适合权限验证)
    • afterEach:导航后执行(适合埋点统计)
  • 实用方法 :
    • getCurrentRoute: 获取当前路由信息
    • setCustomGetCurrentRoute: 设置自定义获取当前路由的函数
  • 实用工具
    • parseLocation:解析路由位置
    • buildUrl:构建完整 URL
    • getCurrentRoute:获取当前路由
  • 全平台适配:完美支持 H5、小程序和 App

安装指南

使用 pnpm 安装:

bash 复制代码
pnpm install @meng-xi/uni-router

快速入门

初始化路由

typescript 复制代码
import { Router } from '@meng-xi/uni-router'

const router = new Router({
  routes: [
    { path: '/home', meta: { title: '首页' } },
    { path: '/admin', meta: { requiresAuth: true } }
  ]
})

配置路由守卫

typescript 复制代码
// 认证状态检查
const isAuthenticated = () => !!localStorage.getItem('token')

// 前置守卫
router.beforeEach((to, from, next) => {
  if (to.meta?.requiresAuth && !isAuthenticated()) {
    next({ path: '/login', query: { redirect: to.fullPath } })
  } else {
    next()
  }
})

// 后置钩子
router.afterEach((to, from) => {
  console.log(`从 ${from?.path || '起始页'} 跳转到 ${to.path}`)
})

路由跳转示例

typescript 复制代码
// 基本跳转
router.push('/products')

// 带参数跳转
router.push({
  path: '/search',
  query: { keyword: '手机' }
})

// 替换当前页
router.replace('/profile')

// 重启跳转
router.launch('/dashboard')

// 切换 tab 页
router.tab('/tabBar/cart')

// 页面返回
router.back()
router.go(-2)

单例模式

创建单例

typescript 复制代码
import { Router } from '@meng-xi/uni-router'

Router.getInstance({
  routes: [
    { path: '/home', meta: { title: '首页' } },
    { path: '/admin', meta: { requiresAuth: true } }
  ]
})

守卫配置

typescript 复制代码
Router.beforeEach((to, from, next) => {
  if (to.meta?.requiresAuth && !isAuthenticated()) {
    next({ path: '/login', query: { redirect: to.fullPath } })
  } else {
    next()
  }
})

Router.afterEach((to, from) => {
  console.log(`路由跳转: ${from?.path || '起始页'} → ${to.path}`)
})

导航操作

typescript 复制代码
Router.push('/products')
Router.push({ path: '/search', query: { keyword: '手机' } })
Router.replace('/profile')
Router.launch('/dashboard')
Router.tab('/tabBar/cart')
Router.back()
Router.go(-2)

API 参考

Router 类

实现 RouterInterface 接口,提供核心路由功能。

构造函数

typescript 复制代码
constructor(options?: RouterOptions)

参数说明:

  • options(可选):包含 routes 路由配置数组和 customGetCurrentRoute 自定义获取当前路由的函数的对象。

导航方法

方法 说明 参数 返回值
push 保留当前页面的跳转 location: RouteLocationRaw Promise<void>
replace 替换当前页面 location: RouteLocationRaw Promise<void>
launch 重启应用跳转 location: RouteLocationRaw Promise<void>
tab 切换 tab 页面 location: RouteLocationRaw Promise<void>
go 返回指定层数(默认-1) delta?: number void
back 返回上一页 - void

路由守卫

方法 说明 参数 返回值
beforeEach 全局前置守卫 guard: NavigationGuard void
afterEach 全局后置钩子 hook: AfterEachHook void

实用方法

方法 说明 参数 返回值
getCurrentRoute 获取当前路由信息 - RouteLocation
setCustomGetCurrentRoute 设置自定义获取当前路由的函数 `customFunction: () => Route null`

实用工具

parseLocation

typescript 复制代码
parseLocation(location: RouteLocationRaw): { path: string; query?: Record<string, string> }
  • 功能:将路由位置信息统一解析为路径和查询参数对象
  • 参数
    • location:支持字符串或对象格式的路由位置信息
  • 返回:包含路径字符串和可选查询参数的对象

buildUrl

typescript 复制代码
buildUrl(path: string, query?: Record<string, string | number | boolean>): string
  • 功能:根据路径和查询参数构建完整 URL
  • 参数
    • path:目标路径字符串
    • query(可选):查询参数对象
  • 返回:完整的 URL 字符串

getCurrentRoute

typescript 复制代码
getCurrentRoute(currentPage: CurrentPage | null): Route | null
  • 功能:获取当前页面的路由信息(支持多平台差异处理)
  • 参数
    • currentPage:当前页面实例(可为 null)
  • 返回:当前路由对象或 null(获取失败时)

错误处理

MxRouterError类提供以下静态方法创建错误实例:

typescript 复制代码
static navigationAborted(): MxRouterError
  • 用途:创建导航中止错误(用于前置守卫拦截场景)
  • 返回:导航中止错误实例
typescript 复制代码
static navigationRedirect(location: string | RouteLocationRaw): MxRouterError
  • 用途:创建导航重定向错误(用于路由重定向场景)
  • 参数
    • location:重定向目标位置
  • 返回:导航重定向错误实例
typescript 复制代码
static navigationFailed(message: string): MxRouterError
  • 用途:创建导航失败错误(用于导航异常场景)
  • 参数
    • message:错误描述信息
  • 返回:导航失败错误实例

invalidMethod

typescript 复制代码
static invalidMethod(method: string): MxRouterError
  • 用途:创建无效方法错误(用于调用非法导航方法场景)
  • 参数
    • method:无效的方法名称
  • 返回:无效方法错误实例
相关推荐
2501_916007475 小时前
HTTPS 抓包乱码怎么办?原因剖析、排查步骤与实战工具对策(HTTPS 抓包乱码、gzipbrotli、TLS 解密、iOS 抓包)
android·ios·小程序·https·uni-app·iphone·webview
Q_Q5110082855 小时前
python+django/flask+uniapp基于微信小程序的瑜伽体验课预约系统
spring boot·python·django·flask·uni-app·node.js·php
性野喜悲6 小时前
uniapp+<script setup lang=“ts“>解析后端返回的图片流并将二维码展示在页面中
uni-app
卷Java7 小时前
CSS模板语法修复总结
java·前端·css·数据库·微信小程序·uni-app·springboot
笨笨狗吞噬者9 小时前
【uniapp】小程序端实现分包异步化
前端·微信小程序·uni-app
2501_9160088911 小时前
HTTPS 双向认证抓包实战,原理、难点、工具与可操作的排查流程
网络协议·http·ios·小程序·https·uni-app·iphone
2501_9151063211 小时前
HTTPS 能抓包吗?实战答案与逐步可行方案(HTTPS 抓包原理、证书Pinning双向认证应对、工具对比)
网络协议·http·ios·小程序·https·uni-app·iphone
游戏开发爱好者811 小时前
App HTTPS 抓包实战,原理、常见问题与可行工具路线(开发 测试 安全 角度)
网络协议·安全·ios·小程序·https·uni-app·iphone
2501_9151063211 小时前
App HTTPS 抓包实战指南,原理、常见阻碍、逐步排查与工具组合
网络协议·http·ios·小程序·https·uni-app·iphone
2501_9159214317 小时前
Charles 抓包 HTTPS 原理详解,从 CONNECT 到 SSL Proxying、常见问题与真机调试实战(含 Sniffmaster 补充方案)
android·网络协议·小程序·https·uni-app·iphone·ssl