element-ui 导航菜单(NavMenu ) 默认展开所有菜单及注意事项

本文介绍如何在Element UI的el-menu组件中正确设置:default-openeds属性,避免菜单展开时出现的重复值导致的收起菜单功能失效的Bug。在动态获取菜单项时,需确保openeds数组内无重复值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.需要给el-menu 添加属性  :default-openeds="openeds" ,  openeds是默认展开菜单的el-submenu的index属性的值的集合,是一个数组。

2.一般我们再项目中菜单项都是动态获取的,所以我们在向openeds中动态添加index值时,一定要注意:数组中不能出现重复值(如 ['0','1','2','0','3','4']),这样虽然也会展开指定菜单,但是会出现一个bug,就是在触发收起菜单close方法时,菜单不会收起。

<template> <nav class=“main-nav” :class=“{ ‘nav-hidden’: !isVisible, ‘at-top’: atTop, ‘mobile-nav’: isMobile }” <div class="nav-brand"> <img src="@/assets/logo.png" alt="品牌Logo" class="nav-logo" @click="handleLogoClick" > </div> <!-- 桌面导航 --> <div v-if="!isMobile" class="desktop-nav"> <a v-for="(item, index) in menuItems" :key="`nav-${index}`" class="nav-link" :class="{ active: activeAnchor === item.anchor }" @click="handleNavClick(item.anchor)" > {{ item.title }} <div class="link-underline"></div> </a> </div> <!-- 移动端汉堡菜单 --> <div v-else class="hamburger" :class="{ open: isMobileMenuOpen }" @click.stop="toggleMobileMenu" > <span class="bar">22</span> <span class="bar">33</span> <span class="bar">44</span> </div> <!-- 移动端导航菜单 --> <transition name="slide-down"> <div v-if="isMobileMenuOpen" class="mobile-nav-menu"> <a v-for="(item, index) in menuItems" :key="`m-nav-${index}`" class="mobile-nav-link" :class="{ active: activeAnchor === item.anchor }" @click="handleNavClick(item.anchor)" > {{ item.title }} </a> </div> </transition> </nav> </template> <script> export default { name: ‘MainNav’, props: { menuItems: Array, isVisible: Boolean, atTop: Boolean, isMobile: Boolean }, data() { return { isMobileMenuOpen: false } }, mounted() { window.addEventListener(‘resize’, this.handleResize) }, beforeDestroy() { window.removeEventListener(‘resize’, this.handleResize) }, watch: { isMobile(val) { if (!val) this.isMobileMenuOpen = false } }, methods: { handleResize() { this.$emit(‘update:isMobile’,window.innerWidth <= 768); // 处理特定尺寸的响应式逻辑 }, toggleMobileMenu() { this.isMobileMenuOpen = !this.isMobileMenuOpen document.body.style.overflow = this.isMobileMenuOpen ? ‘hidden’ : ‘auto’ if (this.isMobileMenuOpen) { document.addEventListener(‘click’,this.closeMenuOnClickOutside,true); }else { document.removeEventListener(‘click’,this.closeMenuOnClickOutside,true); } }, closeMenuOnClickOutside(event) { if (!this.$el.contains(event.target)) { this.isMobileMenuOpen = false document.body.style.overflow = 'auto' } }, handleNavClick(anchor) { this.$emit('nav-click', anchor) this.isMobileMenuOpen = false }, handleLogoClick() { window.scrollTo({ top: 0, behavior: 'smooth' }) } } } </script> 给我加上element的国际化,多种语言(中文、繁体中文、英文、日文、俄语、西班牙语等)可以切换,移动端也要,并且需要安装什么配置什么也要告诉我,一步一步给我写清楚,不要省略步骤和代码
03-18
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值