广告
返回顶部
首页 > 资讯 > 前端开发 > JavaScript >vue+quasar使用递归实现动态多级菜单
  • 210
分享到

vue+quasar使用递归实现动态多级菜单

2024-04-02 19:04:59 210人浏览 薄情痞子
摘要

本文实例为大家分享了Vue+quasar使用递归实现动态多级菜单的具体代码,供大家参考,具体内容如下 效果图: 菜单初始化入口 menu.vue,初始化侧边栏菜单组建,<my

本文实例为大家分享了Vue+quasar使用递归实现动态多级菜单的具体代码,供大家参考,具体内容如下

效果图:

菜单初始化入口 menu.vue,初始化侧边栏菜单组建,<my-q-menu/>才是递归开始

<template>
  <q-drawer
    v-model="is_hide_"
    show-if-above
    bordered
    content-class="bg-grey-2"
    :width="240"
  >
  <q-scroll-area class="fit">
    <!-- 递归实现 循环菜单 -->
    <my-q-menu/>
  </q-scroll-area>
  </q-drawer>
</template>

<script>
import MyQMenu from './myQMenu'
export default {
  name: 'myMenu',
  components: { MyQMenu },
  data () {
    return {
      leftDrawerOpen: true   
    }
  },
  props: ['is_hide'],
  computed: {
    is_hide_: {
      get () { return this.is_hide },    // boolean 型,用于控制侧边菜单栏是否显示
      set () {}
    }
  },
}
</script>

菜单递归入口 <my-q-menu/>,传入menuList.json菜单配置信息

参数说明

@my-router 菜单配置信息
@init-level 初始化菜单缩进大小

<template>
  <div>
    <!-- 动态菜单 -->
    <q-list>
      <my-q-menu-item :my-router="menuList" :init-level="0"/>
    </q-list>
  </div>
</template>

<script>
import MyQMenuItem from './myQMenuItem'

export default {
  name: 'my-q-menu',
  components: { MyQMenuItem },
  data () {
    return {
      menuList: [
        {
          icon: 'inbox',
          label: '菜单1',
          children: [
            {
              icon: 'perm_identity',
              label: '菜单1-1',
              path: '/about'
            },
            {
              icon: 'delete',
              label: '菜单1-2',
              children: [
                {
                  icon: 'settings',
                  label: '菜单2-1',
                  path: '/noty'
                }
              ]
            }
          ]
        },
        {
          isItemLabel: true,
          Label_text: 'item-label '
        },
        {
          icon: 'feedback',
          label: '菜单数据结构',
          path: '/test',
          hidden: false
        }
      ]
    }
  }
}
</script>

菜单元素递归执行体 <my-q-menu-item/>

<!--
   动态菜单 item 递归实现
   myRouter : 菜单列表
   initLevel : 菜单初始化缩进等级
   author : ths
-->
<template>
  <div>
  
    <div v-for="(item,index) in myRouter" :key="index">

      <!-- 当菜单item标识为 ItemLabel 时,显示Label_text,不渲染为菜单 -->
      <q-item-label v-if="item.isItemLabel" header class="text-weight-bold text-uppercase">
        {{item.Label_text}}
      </q-item-label>

      <!-- 先判断当前菜单是否需要显示 -->
      <div v-if="!item.hidden && !item.isItemLabel">
      
        <!-- 当没有子菜单时,结束递归 -->
        <div v-if="!item.children">
          <q-expansion-item
            :header-inset-level="initLevel"
            expand-icon="1"
            :to="item.path"
            :icon="item.icon"
            :label="item.label"
          />
        </div>
        
        <!-- 子菜单依然存在时,继续递归 -->
        <div v-else>
          <q-expansion-item
            expand-separator
            :header-inset-level="initLevel"
            :to="item.path"
            :icon="item.icon"
            :label="item.label"
          >
            <!-- 进入下一次递归 -->
            <my-q-menu-item :my-router="item.children" :init-level="initLevel+0.3"/>
          </q-expansion-item>
        </div>
      </div>

    </div>
  </div>
</template>

<script>
export default {
  name: 'my-q-menu-item',
  data () {
    return {}
  },
  props: ['myRouter', 'initLevel']
}
</script>

菜单元素解释

menuList: [
        {
          icon: 'inbox',        //图标
          label: '菜单1',        //label
          children: [
            {
              icon: 'perm_identity',   
              label: '菜单1-1',
              path: '/about'     //路径
            },
            {
              icon: 'delete',
              label: '菜单1-2',
              children: [
                {
                  icon: 'settings',
                  label: '菜单2-1',
                  path: '/noty'
                }
              ]
            }
          ]
        },
        {
          isItemLabel: true,      //是否分隔栏
          Label_text: 'item-label '   //分隔栏label
        },
        {
          icon: 'feedback',
          label: '菜单数据结构',
          path: '/test',
          hidden: false            //是否隐藏
        }
      ]

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程网。

--结束END--

本文标题: vue+quasar使用递归实现动态多级菜单

本文链接: https://www.lsjlt.com/news/164329.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • vue+quasar使用递归实现动态多级菜单
    本文实例为大家分享了vue+quasar使用递归实现动态多级菜单的具体代码,供大家参考,具体内容如下 效果图: 菜单初始化入口 menu.vue,初始化侧边栏菜单组建,<my...
    99+
    2022-11-13
  • vue递归实现三级菜单
    本文实例为大家分享了vue递归实现三级菜单的具体代码,供大家参考,具体内容如下 父组件 <template> <div class="menu-leve...
    99+
    2022-11-12
  • vue递归组件实现elementUI多级菜单
     本文实例为大家分享了vue递归组件实现elementUI多级菜单的具体代码,供大家参考,具体内容如下 先看效果: 一、子组件 <template>     ...
    99+
    2022-09-27
  • vue递归组件怎么实现elementUI多级菜单
    这篇“vue递归组件怎么实现elementUI多级菜单”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“vue递归组件怎么实现e...
    99+
    2023-07-02
  • 怎么使用el-menu递归实现多级菜单组件
    今天小编给大家分享一下怎么使用el-menu递归实现多级菜单组件的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。1. 效果:2...
    99+
    2023-07-06
  • el-menu递归实现多级菜单组件的示例
    目录1. 效果:2. 实现:3. 使用组件:1. 效果: 2. 实现: 创建外层菜单AsideMenu.vue组件和子菜单项AsideSubMenu.vue组件,在AsideS...
    99+
    2023-05-15
    el-menu多级菜单 el-menu递归菜单
  • vue实现三级联动动态菜单
    本文实例为大家分享了vue实现三级联动动态菜单的具体代码,供大家参考,具体内容如下 三级联动动态菜单展示:一级菜单选中,生成二级菜单数据,二级菜单选中,生成三级菜单数据(根据上一级菜...
    99+
    2022-11-13
  • 怎么使用Vue递归组件实现树形菜单
    本文小编为大家详细介绍“怎么使用Vue递归组件实现树形菜单”,内容详细,步骤清晰,细节处理妥当,希望这篇“怎么使用Vue递归组件实现树形菜单”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。效果如下图,点击后打开二级...
    99+
    2023-07-04
  • 怎么使用SpringBoot+Vue实现动态菜单
    本篇内容介绍了“怎么使用SpringBoot+Vue实现动态菜单”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1. 整体思路效果图:最终菜单...
    99+
    2023-07-02
  • vue+elementUI组件递归实现可折叠动态渲染多级侧边栏导航
    早就实现了功能,但是发现点击的时候,选中的菜单项背景色会变白,周五时候仔细观察了一下,发现并不是调整样式的问题,而是选项没有被选中,于是好好研究了一下组件递归这块,总结记录一下心路历...
    99+
    2022-11-12
  • 使用CSS怎么实现多级菜单
    这期内容当中小编将会给大家带来有关使用CSS怎么实现多级菜单,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。<ul id="menu">  &l...
    99+
    2023-06-08
  • Vue下如何用递归组件实现一个可折叠的树形菜单
    这篇文章主要介绍“Vue下如何用递归组件实现一个可折叠的树形菜单”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Vue下如何用递归组件实现一个可折叠的树形菜单”文章能帮助大家解决问题。在Vue.js中...
    99+
    2023-07-04
  • 怎么使用Java递归实现评论多级回复功能
    这篇文章主要介绍“怎么使用Java递归实现评论多级回复功能”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“怎么使用Java递归实现评论多级回复功能”文章能帮助大家解决问题。评论实体数据库存储字段: i...
    99+
    2023-07-02
  • 怎么使用JS实现三级联动菜单
    这篇“怎么使用JS实现三级联动菜单”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“怎么使用J...
    99+
    2022-10-19
  • 使用Ajax怎么实现一个二级联动菜单
    本篇文章为大家展示了使用Ajax怎么实现一个二级联动菜单,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。index.jsp<%@ page language="ja...
    99+
    2023-06-08
  • 使用vue-element-admin框架从后端动态获取菜单功能的实现
    目录2、详解2.1、新增asyncRoutes路由2.2、新建permission.js文件2.3、在vuex中注册permission模块2.4、在getters中增加路由状态2....
    99+
    2022-11-12
  • MyBatis之自查询使用递归实现 N级联动效果(两种实现方式)
    A:首先先看下一个简单的面试题斐波那契数列计算数组{1,1,2,3,5,8.......} 第30位值规律:1 1 从第三项开始,每一项都是前两项之和    有两种实现方式 第一种方式:public ...
    99+
    2023-05-31
    mybatis 递归 联动
  • 如何使用Java实现一个简易版的多级菜单功能
    小编给大家分享一下如何使用Java实现一个简易版的多级菜单功能,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!正文1,首先是数据库的设计DROP TABL...
    99+
    2023-06-26
  • 如何使用layui实现左侧菜单栏以及动态操作tab项的方法
    这篇文章主要为大家展示了“如何使用layui实现左侧菜单栏以及动态操作tab项的方法”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“如何使用layui实现左侧菜单...
    99+
    2022-10-19
  • MyBatis中动态sql实现传递多个参数并使用if进行参数的判断和实现like模糊搜索以及foreach实现in集合
    场景 在mapper接口层方法参数有id的数组和姓名的模糊搜索和类型的三个参数。 现在需要将这三个参数传递在动态sql的xml中接受并进行判断不为空。 然后查询数据库中记录在第一个参数id数组中的并且姓名是模糊搜索的并且类型是直接相等于的。...
    99+
    2020-04-27
    MyBatis中动态sql实现传递多个参数并使用if进行参数的判断和实现like模糊搜索以及foreach实现in集合 数据库入门 数据库基础教程 数据库 mysql
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作