入门
Uni Router 基于 Uni-App 的路由 API 进行封装。它为 Uni-App 应用程序提供了一个简单易用的路由系统。
采用类似 vue-router 的设计风格,并提供丰富的工具函数,帮助开发者轻松实现跨平台路由管理。
学习基础
这份指南假设你已经对 Uni-App 有了一定的了解。你不必是 Uni-App 的专家,但你也许偶尔需要查看 Uni-App 的文档 来了解某些特性。
示例
为了引入一些核心概念,我们将使用如下的示例:
让我们首先来看目录 src/pages/index 下的组件, index.vue。
App.vue
<template>
<h1>Hello App!</h1>
<mx-router to="/pages/test/index">
<text>MX组件测试</text>
</mx-router>
</template>在这个 template 中使用了一个由 Uni Router 提供的组件: Router。
不同于 Uni-App 的 <navigator> 标签,我们使用组件 Router 来创建链接。使用 Router 组件的属性 to 可以传递路由地址或者路由对象,而不是局限于只能使用路由地址。 我们将会在之后的部分深入了解 Router 组件。
创建路由器实例
路由器实例是通过 Router 类创建的:
import { Router } from '@meng-xi/uni-router'
const router = new Router({
routes: [
{ path: '/pages/index/index', meta: { title: '首页' } },
{ path: '/pages/test/index', meta: { requiresAuth: true } }
]
})或者使用单例模式创建:
import { Router } from '@meng-xi/uni-router'
Router.getInstance({
routes: [
{ path: '/pages/index/index', meta: { title: '首页' } },
{ path: '/pages/test/index', meta: { requiresAuth: true } }
]
})这里的 routes 是一个可选参数,目前的版本暂时没有作用。后续的版本中,此参数会用于生成 pages.json 文件。
其他可以设置的路由选项我们会在之后的版本中逐渐添加以及介绍,目前我们只需要了解 路由器实例。
访问路由器和当前路由
你很可能想要在应用的其他地方访问路由器。
你可以将路由器实例直接导入到你需要它的地方。或者通过配置挂载到 Vue 实例上,通过 $router 直接访问。
// uni-app的vue3版本
import { createSSRApp } from 'vue'
import App from './App.vue'
import router from './router'
export function createApp() {
const app = createSSRApp(App)
app.config.globalProperties.$router = router
return {
app
}
}如果我们使用选项式 API,我们可以在 JavaScript 中如下访问这个属性:this.$router。
export default {
methods: {
goToAbout() {
this.$router.push('/pages/test/index')
}
}
}这里调用了 push(),这是用于编程式导航的方法。我们会在后面详细了解。
对于组合式 API,我们不能通过 this 访问组件实例,所以我们直接使用上述创建的路由实例:
<script setup>
import router from '@/router'
function toTest() {
router.push({
path: '/pages/test/index',
query: {
name: 'Test User',
age: 25
}
})
}
</script>本教程的约定
单文件组件
Uni Router 只适用于 Uni-App 项目中的打包工具 (如 Vite/Webpack) 和Uni-App 组件 (即 .vue 文件) 的应用中使用。
注意
Uni Router 不支持除 Uni-App 外的项目中使用。
组件 API 风格
Uni Router 可以使用组合式 API 或选项式 API 。在必要时,示例将会同时使用两种风格,组合式 API 示例通常会使用 <script setup>,而不是显式的 setup 函数。
如果你对于这两种风格不熟悉,可以参考 Vue - API 风格。
所以,此库支持 Uni-App 的 Vue2 和 Vue3 版本。但是有部分函数可能只支持 Vue3 。
router
在本教程中,我们常常以 router 作为路由器实例提及。即由 new Router() 创建的对象。在应用中,访问该对象的方式取决于上下文。例如,在组合式 API 中,它可以通过导入创建的对象来访问。在选项式 API 中,它可以通过配置到 Vue 实例的 $router 属性来访问。
Router
组件 Router 不会自动注册为全局组件,但是可以通过 Uni-App 的 easycom 来简化组件的引入和注册。但你也可以通过局部导入它们,例如 import RouterLink from '@meng-xi/uni-router/components/router/router.vue'。
在模板中,组件的名字可以是 PascalCase 风格或 kebab-case 风格的。Uni-App 支持两种格式,因此 <RouterLink> 和 <router-link> 通常是等效的。此时应该遵循你自己项目中使用的约定。