路由元字段与类型声明
meta: { requiresAuth: true },以及使用 TypeScript 声明合并为元字段添加类型
路由元字段与类型声明 是 CoddyKit 上的免费 Vue Academy 课时。 这是第 1 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Vue Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Vue Academy 课程共包含 4 节课。
什么是路由元字段
每个路由都可以携带一个 元数据对象:附加到路由上的任意数据。它非常适合存放身份验证要求、允许的角色、页面标题或布局选择等标志。
向路由添加元数据
在路由记录上设置 meta 键。值的具体内容完全由您决定。
const routes = [
{
path: '/dashboard',
component: Dashboard,
meta: { requiresAuth: true, roles: ['admin', 'editor'] }
}
]在守卫中读取元数据
最常见的用途是在导航守卫中使用。router.beforeEach 会在每次导航前运行,并接收目标路由;您可以检查该路由的 meta。
router.beforeEach((to, from) => {
if (to.meta.requiresAuth) {
// check login
}
})重定向未通过身份验证的用户
从守卫中返回一个路由位置即可执行重定向。返回 false 会取消导航;不返回任何内容或返回 true 则允许导航。
router.beforeEach((to) => {
const auth = useAuthStore()
if (to.meta.requiresAuth && !auth.isLoggedIn) {
return { path: '/login' }
}
})基于角色的访问控制
将 roles 元字段与当前用户角色结合起来,即可根据权限限制页面访问。
router.beforeEach((to) => {
const auth = useAuthStore()
const roles = to.meta.roles
if (roles && !roles.includes(auth.role)) {
return { path: '/forbidden' }
}
})元数据会从父级合并
嵌套路由会通过 to.meta 继承父级元数据,该对象会合并所有匹配的记录。除非子级覆盖相同的键,否则子级可以看到父级元数据。
类型问题
默认情况下,TypeScript 会将 meta 类型定义为空对象,因此 to.meta.requiresAuth 会报错。您可以针对 Vue Router 类型使用声明合并来解决此问题。
声明类型化元数据
扩展 vue-router 中的 RouteMeta 接口。请将其放在 .d.ts 文件中,或放在包含 export {} 的任何模块中。
import 'vue-router'
declare module 'vue-router' {
interface RouteMeta {
requiresAuth?: boolean
roles?: string[]
}
}
export {}现在元数据会进行类型检查
扩展类型后,编译器就能了解 meta 的结构。像 requireAuth 这样的拼写错误会被捕获,同时还可以使用自动补全。
router.beforeEach((to) => {
if (to.meta.requiresAuth) { /* typed as boolean | undefined */ }
})在组件中使用元数据
在组件内部,您可以通过 useRoute() 读取当前路由元数据;这同样得益于类型扩展。
import { useRoute } from 'vue-router'
const route = useRoute()
const secure = route.meta.requiresAuth使用元数据设置页面标题
一种常见模式是:在元数据中存储一个 title,然后从全局守卫中设置 document.title。
router.afterEach((to) => {
if (to.meta.title) document.title = to.meta.title
})快速检查
请测试您对路由元数据和类型的了解。
回顾
路由元字段携带每个路由专属的数据:
- 在路由记录上定义元数据(requiresAuth、roles、标题)。
- 在 router.beforeEach 中读取元数据,以守护导航。
- 元数据会从父路由合并到子路由。
- 通过对来自 vue-router 的 RouteMeta 使用声明合并来定义其类型。
用 AI 导师学习 HTML — 免费
在浏览器中编写并运行真实代码,获得全天候 AI 导师的即时帮助,并在网页或应用中继续学习。
- 课程
- 42
- 课程
- 156
常见问题解答
「路由元字段与类型声明」课时是免费的吗?
是的 — 「路由元字段与类型声明」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Vue Academy 课程的其余内容,请升级到 CoddyKit PRO。 Vue Academy 课程共包含 4 节课。
「路由元字段与类型声明」这节课中我会学到什么?
meta: { requiresAuth: true },以及使用 TypeScript 声明合并为元字段添加类型 你通过在浏览器中直接运行的动手代码来练习 Vue Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Vue Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Vue Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 1 节课,共 4 节。
「路由元字段与类型声明」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Vue Academy 课中编写并运行代码吗?
能。每节 Vue Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- 路由元字段与类型声明
- 路由过渡与动画
- 滚动行为配置
- 编程式导航与 useRouter