关于vue菜单导航的问题,如何解决带单高亮,以及父级菜单自动展开?

如下图,vue2项目,我想实现点击tabs标签,左边对应的菜单会高亮显示,一级菜单、二级菜单和三级菜单都要高亮,另外,如果tabs标签对应的是三级菜单,那么相应的二级菜单会自动展开,一级菜单的图标高亮也会自行切换。
ps:点击tabs标签后,页面路由会切换。

img

要实现点击tabs标签后,左边对应的菜单高亮显示,并自动展开二级菜单以及切换一级菜单的图标高亮,你可以按照以下步骤进行操作:

创建一个状态管理器(如Vuex)来管理菜单的状态。在状态管理器中定义一个变量来保存当前选中的tabs标签的索引(或其他唯一标识)。

在菜单组件中,监听tabs标签的点击事件。当点击tabs标签时,触发一个方法,将当前点击的标签的索引(或其他唯一标识)保存到状态管理器中。

在菜单组件的模板中,使用v-bind绑定菜单项的class属性,根据当前选中的tabs标签的索引(或其他唯一标识)判断是否为选中状态,从而为对应的菜单项添加高亮的class。

同样,在菜单组件的模板中,使用v-bind绑定一级菜单图标的class属性,根据当前选中的tabs标签的索引(或其他唯一标识)判断是否为选中状态,从而切换一级菜单图标的高亮样式。

在菜单组件中,监听tabs标签的点击事件,根据点击的tabs标签的类型(一级、二级、三级),判断是否需要展开二级菜单。如果是三级菜单对应的tabs标签,则通过状态管理器更新二级菜单的展开状态。

使用Vue Router来管理页面的路由。当点击tabs标签时,通过Vue Router切换页面的路由,从而实现页面的切换。

通过以上步骤,你可以实现点击tabs标签后,左边对应的菜单高亮显示,并自动展开二级菜单以及切换一级菜单的图标高亮的效果。请根据你的具体项目结构和需求进行相应的调整和实现。

这个用element-ui插件就可以实现,只要赋值菜单就会自己展开和高亮

  • 这有个类似的问题, 你可以参考下: https://ask.csdn.net/questions/7431468
  • 我还给你找了一篇非常好的博客,你可以看看是否有帮助,链接:vue原生可左右滑动的标签栏tabs
  • 除此之外, 这篇博客: 【万字长文】 Vue全家桶从入门到实战,超详细笔记整理 ( 一 ) (建议收藏)中的 10.2 tab 键 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 用来捕获到tab键执行到当前标签是才会触发

    <input type="text" @keyup.tab="test">
    

  • 您还可以看一下 耿职老师的uniapp开发仿阿里飞猪旅游微信小程序,vue中高级课程课程中的 请求tab数据小节, 巩固相关知识点
  • 以下回答由chatgpt基于相关博客总结生成:

    根据问题描述和参考资料,我们可以通过以下步骤来解决这个问题:

    1. 创建一个数据结构来存储菜单的信息,包括一级菜单、二级菜单和三级菜单。可以使用数组或者对象来表示。
    data: {
        menu: [
            {
                title: '一级菜单',
                icon: 'icon1',
                children: [
                    {
                        title: '二级菜单',
                        icon: 'icon2',
                        children: [
                            {
                                title: '三级菜单',
                                icon: 'icon3',
                                route: '/page1'
                            },
                            ...
                        ]
                    },
                    ...
                ]
            },
            ...
        ]
    }
    
    1. 在模板中渲染菜单的视图结构,并实现点击事件。
    <template>
      <div>
        <div v-for="item in menu" :key="item.title" @click="handleMenuClick(item)">
          <div>{{ item.title }}</div>
          <div v-for="child in item.children" :key="child.title" @click="handleMenuClick(child)">
            <div>{{ child.title }}</div>
            <div v-for="grandchild in child.children" :key="grandchild.title" @click="handleMenuClick(grandchild)">
              <div>{{ grandchild.title }}</div>
            </div>
          </div>
        </div>
      </div>
    </template>
    
    1. 在Vue组件的methods中实现handleMenuClick方法,用来处理菜单点击事件。
    methods: {
      handleMenuClick(menuItem) {
        // 更新选中菜单的样式
        this.highlightMenuItem(menuItem);
    
        // 如果点击了三级菜单,则自动展开其对应的二级菜单和一级菜单的图标高亮切换
        if (menuItem.route) {
          const parent = this.findParentMenu(menuItem);
          if (parent) {
            parent.expanded = true;
            this.highlightMenuItem(parent);
            const grandparent = this.findParentMenu(parent);
            if (grandparent) {
              grandparent.expanded = true;
              this.highlightMenuItem(grandparent);
            }
          }
        }
    
        // 更新路由
        if (menuItem.route) {
          this.$router.push(menuItem.route);
        }
      },
      highlightMenuItem(menuItem) {
        // 更新菜单项的样式,比如添加高亮的class
        // 可以使用CSS class或者直接操作DOM来实现
      },
      findParentMenu(menuItem) {
        // 根据菜单项的route反向查找其父级菜单
      }
    }
    
    1. 在样式表中定义菜单项的高亮样式。
    .menu-item.active {
      background-color: #ff0000;
      color: #ffffff;
    }
    

    这个解决方案中,我们通过点击菜单项来触发相应的处理函数。在处理函数中,我们首先更新选中菜单项的样式,然后根据菜单项的层级关系来判断是否需要自动展开上级菜单和切换图标的高亮,最后根据菜单项的route来更新路由。

    请注意,这里的解决方案仅仅是一个示例,具体实现方式可能根据项目的需求和代码结构的不同而有所差异。希望对您有帮助。