el-menu实现左侧菜单栏

el-menu实现左侧菜单栏

v-for循环实现二级菜单栏
  • 使用<router-link>方式
<el-menu :dafault-active="$route.path" unique-opened>
	<template v-for="item in menuData" :index="item.index">
		<!-- 有二级菜单时  -->
		<el-submenu v-if="item.children" :index="item.index" :key="item.index">
			<!-- 添加一级菜单图标与菜单名  -->
			<template slot="title">
				<i class="el-icon-menu"></i>
				<span>{{item.name}}</span>
			</template>
			<!--
				此时index的值需要绑定的是 "citem.path" ,结合<el-menu>中的 :dafault-active="$route.path" 才可以实现刷新后当前路由高亮
				之前绑定的是 "citem.index" 的值,一直不生效
				相应的,如果只有一级菜单,也需要进行对应的修改
			-->
			<router-link v-for="(citem cindex) in item.children" :index="citem.path" :to="citem.path" :key="cindex">
				<el-menu-item :index="citem.path" :key="cindex">
					<!-- 添加二级菜单图标与菜单名  -->
					<template slot="title">
						<i class="el-icon-tickets"></i>
						<span>{{item.name}}</span>
					</template>
				</el-menu-item>
			</router-link>
		</el-submenu>
		<!-- 只有一级菜单 -->
		<!-- 此处index的值需要绑定的也是path -->
		<el-menu-item v-else :index="item.path" :key="item.index">
			<template slot="title">
				<router-link :to="item.path">
					<i class="el-icon-menu"></i>
					<span>{{item.name}}</span>
				</router-link>
			</template>
		</el-menu-item>
	</template>
</el-menu>

data部分添加需要绑定的菜单栏数据,是数组的形式:
在path处填上需要跳转的地址即可

data () {
	return {
		menuData: [
			{
				index: '1',
				path: '',
				name: '一级菜单1'
			},
			{
				index: '2',
				//  path: '',
				name: '一级菜单2',
				children: [
					{
						index: '2-1',
						path: '',
						name: '二级菜单1',
					}
				]
			},
		]
	}
}
开启菜单栏路由模式

设置属性 router
router属性的默认值是false,设置的时候可以直接添加就好
或者绑定属性,把值设为true:
注意需要绑定,前面加 “:”
:router=“true”

<el-menu router></el-menu>
<el-menu :router="true"></el-menu>
刷新后保持当前页菜单栏路由高亮

绑定属性 :default-active="$route.path"
注意:

  • 前边代码中有注释,关于使用v-for循环时,需要绑定 index 值的问题,index绑定的值是path时(:index="item.path"),才可以实现刷新后后高亮
  • 之前一直绑定的是index(:index="item.index"),因此console的时候发现可以获取到this.$route.path的值,但是刷新后并不会高亮
<el-menu :default-active="$route.path"></el-menu>
一次只能展开一个一级菜单

设置属性 unique-opened
unique-opened属性的默认值是false,设置的时候可以直接添加就好
或者绑定属性,把值设为true:
:unique-opened=“true”

<el-menu unique-opened></el-menu>
<el-menu :unique-opened="true"></el-menu>
关闭菜单栏展开与折叠时的动画效果

菜单栏展开与折叠时默认有动画效果,效果其实不太好,看起来不够流畅
设置collapse-transition属性可以进行关闭
该属性的默认值是true,设置为false即可

<el-menu :collapse-transition="false"></el-menu>
### 关于 `el-menu` 左侧导航栏左边空白的原因及解决方案 #### 原因分析 左侧导航栏出现空白区域通常是由以下几个原因引起的: 1. **CSS样式冲突** 如果项目中有其他全局样式或者第三方库的样式影响到 `.el-menu` 的默认布局,可能会导致额外的空白区域。例如,某些 CSS 属性如 `margin`, `padding`, 或者 `box-sizing` 可能被修改[^1]。 2. **菜单宽度设置不当** 默认情况下,Element UI 的 `.el-menu` 组件会根据其子项的内容自动调整宽度。如果未显式指定宽度,而内部内容较少,则可能导致视觉上的空白感[^2]。 3. **折叠状态下的显示问题** 当导航栏处于折叠状态时,`.el-menu-vertical-collapse` 类会被应用。此时如果没有正确处理折叠后的 DOM 结构或样式,也可能引发空白现象。 --- #### 解决方案 以下是几种常见的解决方法及其适用场景: ##### 方法一:检查并修正 CSS 样式 确保没有多余的外边距 (`margin`) 和内边距 (`padding`) 影响到 `.el-menu` 容器。可以通过以下方式排查: ```css /* 清除可能干扰的 margin */ .el-menu { margin: 0; } /* 调整 box-sizing 防止计算错误 */ body, .el-menu { box-sizing: border-box; } ``` 如果有自定义样式覆盖了 Element UI 的默认样式,可以尝试通过增加优先级来修复: ```css /* 使用 !important 提高优先级 */ .el-menu:not(.el-menu--collapse) { width: auto !important; /* 动态适配宽度 */ } ``` 上述代码适用于当导航栏宽度固定不当时的情况。 ##### 方法二:合理配置组件属性 确认是否正确设置了 `default-active` 和 `unique-opened` 等重要参数。这些参数会影响菜单渲染逻辑以及用户体验流畅度。另外,在动态加载数据的情况下,需注意初始化完成后才绑定事件监听器[^3]: ```javascript // Vue 实例中初始化 activeIndex data() { return { activeIndex: '/home', // 设置当前激活路径 }; }, methods: { handleSelect(key, keyPath) { console.log('Selected:', key); } } ``` 对于折叠功能,建议配合 Vuex 存储折叠状态以便跨组件共享: ```html <el-menu :collapse="isCollapse"> </el-menu> <button @click="toggleSidebar">切换侧边栏</button> <script> export default { data() { return { isCollapse: false, }; }, methods: { toggleSidebar() { this.isCollapse = !this.isCollapse; } } }; </script> ``` ##### 方法三:优化路由跳转机制 在实际开发过程中发现,部分开发者习惯直接操作 DOM 来完成页面交互需求,这容易引起不必要的副作用。推荐采用官方支持的方式——即利用 `vue-router` 配合 `index` 字段实现平滑过渡效果: ```html <!-- 推荐写法 --> <el-menu router> <el-menu-item index="/dashboard"> <i class="el-icon-s-home"></i><span>仪表盘</span> </el-menu-item> </el-menu> ``` 这样不仅简化了编码复杂度,还能够充分利用框架内置的功能特性减少潜在 bug 发生概率。 --- ### 总结 针对 `el-menu` 导航栏左侧空白的问题,应先从基础层面入手逐步排除可能性。具体来说就是审查现有 CSS 是否存在异常规则;其次验证组件相关选项配置无误后再考虑更深层次架构设计合理性。最终目标是以最小侵入性的改动达成预期效果的同时保持良好的可维护性和扩展性。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值