By default, layout-related components will automatically obtain the required routes information from vue-router
The meta type
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
}
}
refer router
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
The Icon render as a components, so you can define as any icon component.
Install the required icon component library
Let’s use @element-plus/icons-vue as an example
yarn add @element-plus/icons-vue
# or
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) },
}
Components can only obtain the original routing information defined in vue-router
, and cannot obtain dynamically added routes. When using asynchronously generated dynamic routes, although you can pass prop to the component through routes
, it is more recommended to dynamically increase it through the following methods. Just keep router.options.routes
the same as the final dynamically added 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)
The current component does not support auth routing, you need to manually add
Example: by Dynamic Routing, remove routing information that does not have access rights when generating or adding routes
Or: use router.beforeEach
to check routing information
Of course you can also combine the two way