返回

一劳永逸!Vue3使用el-menu多级菜单出现点击一个全部展开的完美解决方案

前端

解决 Vue3 中 el-menu 多级菜单全部展开的问题

在 Vue3 中使用 el-menu 多级菜单时,您可能会遇到一个常见问题:当您点击一个菜单项时,其子菜单也会自动展开。对于某些用户体验场景来说,这可能是一个问题,因为您可能只希望在将鼠标悬停在菜单项上时才展开子菜单。

问题原因

导致这个问题的原因是 el-menu 的默认展开策略。当您点击一个菜单项时,它会使用 expand-on-click 属性,该属性默认设置为 true,这意味着点击菜单项时将展开其所有子菜单。

解决方案

要解决此问题,您可以通过设置 expand-on-click 属性为 false 来修改 el-menu 的展开策略。这样做将阻止在点击菜单项时展开其子菜单。

代码示例

以下代码示例演示了如何设置 expand-on-click 属性:

<el-menu :default-active="activeIndex" class="el-menu-demo" mode="horizontal" :collapse="isCollapse" @select="handleSelect">
  <el-menu-item index="1">
    首页
  </el-menu-item>
  <el-sub-menu index="2">
    <template #title>
      产品
    </template>
    <el-menu-item index="2-1">
      产品1
    </el-menu-item>
    <el-menu-item index="2-2">
      产品2
    </el-menu-item>
  </el-sub-menu>
  <el-menu-item index="3">
    关于我们
  </el-menu-item>
</el-menu>
export default {
  data() {
    return {
      activeIndex: '1',
      isCollapse: false,
    };
  },
  methods: {
    handleSelect(index) {
      this.activeIndex = index;
    },
  },
};

总结

通过设置 expand-on-click 属性,您可以轻松解决 Vue3 中 el-menu 多级菜单全部展开的问题。现在,当您点击一个菜单项时,其子菜单将不会自动展开,只有在将鼠标悬停在菜单项上时,才会展开。

常见问题解答

1. 为什么不使用 CSS 解决此问题?

虽然您可以使用 CSS 来隐藏子菜单,但此方法存在一些缺点。它可能会中断 el-menu 的默认样式,并且可能与其他 CSS 规则冲突。

2. 如何在特定情况下启用 expand-on-click

您可以通过在菜单项上添加 :expand-on-click="true" 属性来启用特定菜单项的 expand-on-click

3. 如何禁用所有菜单项的 expand-on-click

要禁用所有菜单项的 expand-on-click,请使用 CSS 选择器 el-menu-item 并将其 expand-on-click 属性设置为 false

4. 如何在菜单项上显示子菜单计数?

您可以使用 count 属性在菜单项上显示子菜单计数。

5. 如何自定义子菜单展开动画?

您可以使用 transition 属性自定义子菜单展开动画。