element-plus的菜单组件el-menu

菜单是几乎是每个管理系统的软件系统中不可或缺的,element-plus提供的菜单组件可以快速完成大部分的菜单的需求开发,
该组件内置和vue-router的集成,使用起来很方便。

主要组件如下

el-menu 顶级菜单组件

主要属性
mode:决定菜单的展示模式,水平或者垂直。
router:是否启用vue-router

在这里插入图片描述

el-sub-menu 子菜单组件

子菜单组件,如果子菜单还有子菜单可进行多层嵌套
index属性是比较重要的,推荐设置
在这里插入图片描述

el-menu-item-group

菜单项组组件
主要属性
title:标识分组类别

el-menu-item

菜单项组件
index属性:如果启用vue-router,此属性需要跟vue-router的路由的path保持一致。
route:可不设置,如果设置了前者
在这里插入图片描述

示例

<script setup lang="ts">
import { onMounted, reactive, ref, watch } from 'vue'
import { RouterLink, RouterView,useRoute,useRouter } from 'vue-router'
import type {MenuItemRegistered} from 'element-plus'

const selectEvent=(obj:MenuItemRegistered)=>{
  console.log(obj.index)
}

</script>


<template>

  <div>
    <el-container>
      <el-header></el-header>
      <el-main>
        
          


      <el-row>
        <el-col :span="12">
          <h5>未来manager</h5>
            <el-menu router default-active="/about">
                <el-sub-menu index="userCenter">
                  <template #title>
                      <el-icon><location /></el-icon>
                      <span>系统管理</span>
                  </template>
                  <el-menu-item-group title="用户center">
                    <el-menu-item index="/" @click="selectEvent">用户管理</el-menu-item>
                    <el-menu-item index="/about" @click="selectEvent">用户组管理</el-menu-item>
                  </el-menu-item-group>
                </el-sub-menu>
            </el-menu>
        </el-col>
        <el-col :span="12">
          <router-view v-slot="{ Component }">
        <keep-alive >
          <component :is="Component" :key="$route.fullPath" />
        </keep-alive>
      </router-view>
        </el-col>
      </el-row>




      

      </el-main>
      <el-footer></el-footer>

    </el-container>


  </div>



</template>

<style scoped></style>

import { createRouter, createWebHashHistory } from 'vue-router'
import HomeView from '../views/HomeView.vue'
import ChatRoom from '@/components/ChatRoom.vue';

const router = createRouter({
  history: createWebHashHistory(import.meta.env.BASE_URL),
  routes: [
    {
      path: '/',
      name: 'home',
      component: HomeView
    },
    {
      path: '/about',
      name: 'about',
      // route level code-splitting
      // this generates a separate chunk (About.[hash].js) for this route
      // which is lazy-loaded when the route is visited.
      component: ChatRoom
    }
  ]
})

export default router

在这里插入图片描述
https://element-plus.org/zh-CN/component/menu.html#menu-item-attributes

### Element Plus `el-menu` 组件使用指南 #### 一、基础介绍 `el-menu` 是 Element Plus 提供的一个用于创建导航菜单组件。此组件支持多种配置选项,可以适应不同的应用场景需求,无论是垂直还是水平布局都能很好地适配[^2]。 #### 二、属性设置 为了实现更加灵活的功能定制,在实际开发过程中可以通过调整如下几个重要参数来改变菜单的行为: - **mode**: 设置菜单显示方式,默认为 vertical(垂直),也可以设为 horizontal(水平)。不同模式下样式会有所区别。 - **router**: 当开启该属性时,menu 的 index 属性值会被当作 path 来处理,从而与 vue-router 配合工作,方便地管理页面跳转逻辑[^3]。 - **default-active**: 定义当前激活项对应的路径或索引值;当配合 router 使用时通常绑定 `$route.path` ,以确保选中的状态能自动更新至当前浏览地址匹配的一项上。 ```html <el-menu router :default-active="$route.path"> </el-menu> ``` #### 三、子元素说明 对于具体的菜单条目,则通过嵌套 `<el-menu-item>` 或者带有更多层次结构的 `<el-sub-menu>` 实现。值得注意的是,在后者内部不宜直接包裹 `<span>` 标签作为图标容器,因为这可能会引起样式错乱或其他不可预见的问题[^1]。 正确做法应当利用内置插槽机制完成复杂内容填充,比如结合 `el-icon` 和动态加载 icon 组件的方式展示图形化标志: ```html <el-sub-menu index="..."> <template #title> <!-- 图标 --> <el-icon><component :is="item.meta.icon"/></el-icon> <!-- 菜单项名称 --> <span>{{ item.meta.title }}</span> </template> <!-- 子级菜单列表... --> </el-sub-menu> ``` #### 四、动态数据源集成 如果希望基于路由表或者其他形式的数据集自动生成整个菜单体系的话,那么可以在模板里运用循环指令遍历目标集合并按需渲染各个节点。 ```javascript // 假定存在一个名为 'routes' 的数组变量存储着所有待呈现的一级/多级链接对象... const routes = [ { path: '/', meta: { title: "首页", icon: HomeFilled } }, // 更多项... ]; ``` ```html <!-- 动态生成一级菜单--> <el-menu-item v-for="(route, idx) in routes" :key="idx" :index="route.path"> <template #title> <el-icon><component :is="route.meta.icon"/></el-icon> <span>{{ route.meta.title }}</span> </template> </el-menu-item> ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值