vue3+element-plus 实现动态菜单和动态路由的渲染
warning:
这篇文章距离上次修改已过187天,其中的内容可能已经有所变动。
<template>
<el-menu :default-openeds="defaultOpeneds" router>
<template v-for="menu in menuList" :key="menu.name">
<el-sub-menu v-if="menu.children && menu.children.length" :index="menu.path">
<template #title>
<i :class="menu.icon"></i>
<span>{{ menu.title }}</span>
</template>
<el-menu-item v-for="subMenu in menu.children" :key="subMenu.name" :index="subMenu.path">
{{ subMenu.title }}
</el-menu-item>
</el-sub-menu>
<el-menu-item v-else :index="menu.path">
<i :class="menu.icon"></i>
<span>{{ menu.title }}</span>
</el-menu-item>
</template>
</el-menu>
</template>
<script setup>
import { ref } from 'vue';
import { useRoute } from 'vue-router';
const route = useRoute();
const defaultOpeneds = ref([route.matched[0].path]);
const menuList = ref([
{
title: '首页',
icon: 'el-icon-house',
path: '/home',
children: []
},
{
title: '用户管理',
icon: 'el-icon-user',
path: '/users',
children: [
{ title: '用户列表', path: '/users/list' },
{ title: '用户添加', path: '/users/add' }
]
}
// ...更多菜单项
]);
</script>
这个例子中,我们使用了Vue 3的 <script setup>
语法糖来简化组件的编写。menuList
是一个响应式数组,包含了顶部菜单和子菜单的数据。defaultOpeneds
反映了当前激活菜单项的路径。使用 v-for
指令来遍历 menuList
,并根据每个菜单项是否有子菜单来渲染 <el-sub-menu>
或 <el-menu-item>
组件。这样就实现了动态菜单的渲染。此外,router
属性确保了点击菜单项会触发路由导航。
评论已关闭