在 Vue 项目中,我们常常需要构建各种菜单结构。下面就来详细介绍如何基于给定的代码来开发一个菜单组件。
 
组件部分
一、模板部分
<template> 
    <template v-for="item in menuTree" :key="item._id"> 
        <el-sub-menu v-if="item.children && item.children.length > 0" :key="item._id" :index="item.name">
            <template #title>
                <span>{{ item.title }}</span>
            </template>
            <el-menu-item-group>
                <tree-menu :menuTree="item.children" />
            </el-menu-item-group>
        </el-sub-menu>
        <el-menu-item v-else :index="item.name" @click="clickMenu(item)" style="">
            <span>{{ item.title }}</span>
        </el-menu-item>
    </template>
</template>
 
这里通过 v-for 循环遍历 menuTree 数据来生成菜单项目。根据每个项目是否有子项,分别渲染为不同的组件。
二、脚本部分
<script setup lang="ts">
    import { onMounted, reactive,  ref,defineProps} from 'vue';
    
    const props = defineProps({
        menuTree: []
    });
    // 点击菜单时的处理函数
    function clickMenu(val) {
        // 这里可以进行各种点击后的操作
    }
</script>
 
我们导入了必要的模块,定义了接收外部传入的 menuTree 数据的属性。clickMenu 函数用于处理菜单点击事件。
三、样式部分
<style>
 .el-menu-item,.el-menu-item{
    width: 230px;
  }
</style>
 
这部分用于设置菜单项目的宽度等样式。
父级调用示例
示例代码调用
假设我们有以下的菜单数据:
const menuData = [
    {
        _id: 1,
        name: '菜单 1',
        title: '菜单 1 标题',
        children: [
            {
                _id: 2,
                name: '子菜单 1',
                title: '子菜单 1 标题'
            }
        ]
    },
    {
        _id: 3,
        name: '菜单 2',
        title: '菜单 2 标题',
        ismenu: 1
    }
];
 
然后在使用该组件的地方可以这样进行设置:
			
	 <el-menu :default-active="activeMenu" class="nav-menu" :router="true" :show-timeout="3000" :collapse="isCollapse">
       <tree-menu :menuTree="menuData" />
	</el-menu>
 
通过以上步骤,我们就可以成功开发出一个具有层次结构的菜单组件,根据实际需求灵活地展示和处理菜单操作。
希望这个教程对大家有所帮助,让大家能够更好地理解和掌握 Vue 菜单组件的开发过程。


















