默认情况下,布局相关的组件会自动从 vue-router
中获取所需要的路由信息
meta 类型
import type { Component } from 'vue'
import 'vue-router'
declare module 'vue-router' {
interface RouteMeta {
/** the Menu title */
title?: string
/** the Menu icon */
icon?: string | Component
/** whether to show in the Menu */
hidden?: boolean
/** whether to use ElMenuItemGroup instead of ElSubMenu */
group?: boolean
/** the animation name of transition pages */
transition?: string
}
}
参考路由
import { markRaw } from 'vue'
import { Edit } from '@element-plus/icons-vue'
import BaseLayout from '../layout/Layout.vue'
import type { RouteRecordRaw } from 'vue-router'
const routes: RouteRecordRaw[] = [
{
path: '/dev/',
redirect: '/dev/Layout',
component: BaseLayout,
meta: { title: 'Development', icon: markRaw(Edit) },
children: [
{
path: '/dev/Layout',
component: () => import('../views/Layout.vue'),
meta: { title: 'Layout' },
},
{
path: '/dev/Table',
component: () => import('../views/Table.vue'),
meta: { title: 'Table' },
},
{
path: '/dev/Form',
component: () => import('../views/Form.vue'),
meta: { title: 'Form' },
},
{
path: '/dev/Crud',
component: () => import('../views/Crud.vue'),
meta: { title: 'Crud' },
},
],
},
]
export default routes
组件库内部直接将 icon 渲染成一个组件,所以你可以定义为任意图标组件
安装需要的图标组件库
下面使用 @element-plus/icons-vue 举例
yarn add @element-plus/icons-vue
# 或者
npm install @element-plus/icons-vue
import { Edit } from '@element-plus/icons-vue'
app.component(Edit.name, Edit)
{
name: 'admin',
path: '/admin',
component: Layout,
meta: { title: 'Admin', icon: 'edit' },
}
import { markRaw } from 'vue'
import { Edit } from '@element-plus/icons-vue'
// ...
{
name: 'admin',
path: '/admin',
component: Layout,
meta: { title: 'Admin', icon: markRaw(Edit) },
}
组件只能够获取定义在 vue-router
中的原始路由信息,不能够获取动态增加的路由。当使用异步生成的动态路由时,虽然可以通过 routes
向组件中传值,但更推荐通过通过下面方式动态增加。只需要保持 router.options.routes
同最终动态增加的路由相同即可
const newRoute = {
name: 'admin',
path: '/admin',
component: Layout,
meta: { title: 'Admin' },
children: [
{
path: 'settings',
component: AdminSettings,
meta: { title: 'Settings' },
},
],
}
router.addRoute(newRoute)
router.options.routes.push(newRoute)
当前组件是不支持路由权限验证的,你需要手动增加
比如:通过 异步路由 的方式,在增加生成或增加路由时去除没有访问权限的路由信息
或者:在 router.beforeEach
中进行跳转验证
当然也可以结合两者使用