• Vue3使用递归组件封装El-Menu多级菜单


    在这里插入图片描述

    <template>
        <aside class="menu">
            <el-scrollbar>
                <el-menu class="menu-main" router :default-active="route.path" unique-opened background-color="#18214C"
                    text-color="#fff">
                    <menuItem v-for="item in menuList" :item="item" :key="item.path" />
                el-menu>
            el-scrollbar>
        aside>
    template> 
    <script setup>
    import menuItem from "./components/menuItem.vue"
    import { useRoute } from "vue-router"
    const route = useRoute()
    
    const menuList = [
        {
            path: "/index",
            component: () => import("@/views/index.vue"),
            name: "index",
            meta: {
                title: "一级菜单"
            }
        },
        {
            path: "/level",
            name: "level",
            meta: {
                title: "多级菜单"
            },
            children: [
                {
                    path: "/level/level-1",
                    name: "level-1",
                    meta: {
                        title: "多级菜单-1"
                    },
                    children: [
                        {
                            path: "/level/level-1/level-1-1",
                            component: () => import("@/views/level/level-1/level-1-1.vue"),
                            name: "level-1-1",
                            meta: {
                                title: "多级菜单-1"
                            }
                        }]
                },
                {
                    path: "/level/level-2",
                    component: () => import("@/views/level/level-2.vue"),
                    name: "level-2",
                    meta: {
                        title: "多级菜单-2"
                    }
                }
            ]
        }
    ]
    
    
    script>
    <style lang='scss' scoped>
    .menu {
        height: 100vh;
        overflow: hidden;
        background-color: #18214C;
    
        &-main {
            border: none;
        }
    
        &-main:not(.el-menu--collapse) {
            width: 220px;
        }
    }
    style>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    <template>
        <template v-if="item.meta && !item.meta.hidden">
            <el-sub-menu :index="item.path" :key="item.path" v-if="item?.children?.length > 0">
                <template #title>
                    <el-icon>
                        <Aim />
                    el-icon>
                    <span>{{ item.meta.title }}span>
                template>
                <menuItem v-for="child in item.children" :item="child" :key="child.path" />
            el-sub-menu>
            <el-menu-item v-else :index="item.path">
                <el-icon>
                    <Aim />
                el-icon>
                <template #title>{{ item.meta.title }}template>
            el-menu-item>
        template>
    template>
    <script setup name="menuItem">
    import { Aim } from '@element-plus/icons-vue'
    const props = defineProps({
        item: {
            type: Object,
            default: () => { },
        },
    })
    script>
    <style lang='scss' scoped>
    .el-menu-item.is-active {
        color: #fff;
        background: #2260FF;
    }
    style>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
  • 相关阅读:
    Linux下使用python统计某个pid的进程的CPU利用率和MEM大小差值
    如何为无属性图设置节点特征?
    Latex在图片中添加文字
    k8s管理工具kubectl详解(二)
    leetcode做题笔记135. 分发糖果
    mybatisPlus
    python数据库——Mysql
    信息化、数字化、智能化的区别到底是什么?这篇文章说清楚了!
    Git详解及 github使用
    JavaWeb-JavaScript中篇总结
  • 原文地址:https://blog.csdn.net/AK852369/article/details/132663339