广告
返回顶部
首页 > 资讯 > 精选 >vue递归组件怎么实现elementUI多级菜单
  • 688
分享到

vue递归组件怎么实现elementUI多级菜单

2023-07-02 18:07:50 688人浏览 八月长安
摘要

这篇“Vue递归组件怎么实现elementUI多级菜单”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“vue递归组件怎么实现e

这篇“Vue递归组件怎么实现elementUI多级菜单”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“vue递归组件怎么实现elementUI多级菜单”文章吧。

先看效果:

vue递归组件怎么实现elementUI多级菜单

一、子组件

<template>    <div class="myDiv">        <!-- 这里的listAll用于接收父组件传递进来的菜单列表 -->        <template v-for="(item,i) in listAll">            <!-- 有child就显示child的下拉型菜单,有小箭头 -->            <el-submenu :index="item.index" :key="i" v-if="item.child.length!=0">                <template slot="title">                    <img :src="item.img" alt="">                    <span>{{item.title}}</span>                </template>                <!-- 再次调用自身组件,传入子集,进行循环递归调用 -->                <Menu :listAll="item.child"></Menu>            </el-submenu>            <!-- 没有child,就显示单个目录,没有小箭头 -->            <el-menu-item :index="item.index" v-else :key="i" @click="handleSelect(item.path,item.title,item.index)">                <span slot="title"><img :src="item.img" alt="">{{item.title}}</span>            </el-menu-item>        </template>    </div></template> <script>export default {    name: 'Menu',    components: {},    props: ['listAll'],    data() {        return {            realList: this.listAll,        }    },    methods: {        //设置路由跳转        handleSelect(path, name, selfIndex) {            this.$router.push(                {                    path: "/" + path,                    query: {                        r_n: name,                        index: selfIndex                    }                }            )        },           },}</script>

二、菜单数据准备

菜单中包含索引,图片,名称,跳转路径,这里我给出一部分数据,路由直接用数字了,你们最好定义为组件的英文名称,这样方便维护。

export function menuJSON() {  var data = [{    title: "元数据管理",    img: "../../../static/img/manager.png",    index: '1',    child: [      {        "title": "元数据信息描述管理", "path": "main/02/005", "img": "../../../static/img/manager.png", "index": "1-2", "child": []      },      {        "title": "元数据分组定义管理", "path": "main/02/007", "img": "../../../static/img/manager.png", "index": "1-3", "child": []      },      {        "title": "元数据信息管理", "path": "main/02", "img": "../../../static/img/manager.png", "index": "1-1", "child": [          { "title": "采集元数据", "path": "main/02/001", "index": "1-1-1", "img": "../../../static/img/blood.png", "child": [] },          { "title": "元模型", "path": "main/02/004", "index": "1-2-1", "img": "../../../static/img/blood.png", "child": [] },        ]      },       {        "title": "元数据统计分析管理", "path": "main/01", "index": "1-4", "img": "../../../static/img/manager.png", "child": [          { "title": "元数据变更管理", "path": "main/01/001", "index": "1-4-1", "img": "../../../static/img/blood.png", "child": [] },          { "title": "数据地图", "path": "main/01/002", "index": "1-4-2", "img": "../../../static/img/blood.png", "child": [] },          {            "title": "元数据分析", "path": "main/01/003", "index": "1-4-3", "img": "../../../static/img/yuanfenxi.png", "child": [               { "title": "血缘分析", "path": "main/01/003/0001", "index": "1-4-3-1", "img": "../../../static/img/blood.png", "child": [] },              { "title": "属性差异分析", "path": "main/01/003/0003", "index": "1-4-3-2", "img": "../../../static/img/chayi.png", "child": [] },              { "title": "影响分析", "path": "main/01/003/0004", "index": "1-4-3-3", "img": "../../../static/img/impact.png", "child": [] },            ]          },         ]      },    ]  },  {    title: "规则管理",    img: "../../../static/img/manager.png",    index: '2',    child: [      { "title": "数据接口定义管理", "index": "2-1", "path": "main/03/001", "img": "../../../static/img/source.png", "child": [] },      { "title": "数据转换规则管理", "index": "2-2", "path": "main/03/004", "img": "../../../static/img/modify.png", "child": [] },    ]  }  ]  return data}

三、父组件调用

<template>    <div class="content menu">        <div class="menu_com" :>            <el-col :span="24">                <el-menu :default-active="activeIndex" class="el-menu-vertical-demo" :default-openeds="defalutIndex" background-color="#003289" text-color="#fff" active-text-color="#ffd04b">                    //调用子组件                    <Menu :listAll="listAll"></Menu>                </el-menu>            </el-col>        </div>    </div></template> <script>import Menu from './menu'import { menujson } from '../../assets/common/Http' //调用js文件中的菜单数据export default {    name: "Menus",    mixins: [mixin],    components: { Menu },    data() {        return {            scrollHeight: 400,            listAll: [],            activeIndex: "-1",            defalutIndex: []        }    },    created() {        //设置点击菜单的索引,可以使得刷新后菜单仍保持原来查看的页面        this.activeIndex = String(this.$route.query.index);        this.listAll = menuJson() //通过调用函数menuJson,获取菜单    },    watch: {        $route(to, from) {            this.activeIndex = this.$route.query.index;        }    },}</script> <style scoped lang="less">@color: #003289;    .menu {        background: @color;         > div {            width: 100%;            padding-top: 20px;            // height: 100%;            color: #ffffff;            overflow-y: scroll;            overflow-x: hidden;            &::-WEBkit-scrollbar {                display: none;            }            h2 {                font-size: 20px;                text-align: center;                padding: 15px 0 25px 0;            }        }    }    .el-menu-demo {        position: absolute;        height: 58px !important;        left: 25%;        top: 0%;    } </style>

补充(面包屑的展示):

有菜单,肯定需要面包屑的展示,例如

vue递归组件怎么实现elementUI多级菜单

这里我用的方法是,根据当前页面名称,从树形菜单数据中查找它的所有父级来实现面包屑导航栏的展示。

html

<el-breadcrumb separator-class="el-icon-arrow-right">    <el-breadcrumb-item v-for="(item,index) in listMenu" :key="index">{{item}}</el-breadcrumb-item></el-breadcrumb>

methods:

methods: { //获取树形数据的某个元素的所有父节点        getTreePath(tree, func, path) {            if (!tree) return []            for (const data of tree) {                // 这里按照你的需求来存放最后返回的内容吧                //这里的title是我的菜单数据里面的名称字段,你可以改成你的                path.push(data.title)                if (func(data)) return path                if (data.child) {                    //获取到子数据,递归调用                    const findChildren = this.getTreePath(data.child, func, path)                    if (findChildren.length) return findChildren                }                path.pop()            }            return []        },        // 获取面包屑        getNavList() {            var name = this.$route.query.r_n //先获取当前路由名称            var tree = menuJson()  //获取菜单数据,menuJson这个函数上面用了,返回的事菜单数据            this.path = [] //path用于存放所有父级,调用前需要清空            //data => data.title === name查找数据中的title是否和当前路由名称相等            this.getTreePath(tree, data => data.title === name, this.path)            this.listMenu = this.path  //找到之后赋值给面包屑路由数组            console.log(this.listMenu)        }    }

以上就是关于“vue递归组件怎么实现elementUI多级菜单”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注编程网精选频道。

--结束END--

本文标题: vue递归组件怎么实现elementUI多级菜单

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

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

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

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

下载Word文档
猜你喜欢
  • vue递归组件实现elementUI多级菜单
     本文实例为大家分享了vue递归组件实现elementUI多级菜单的具体代码,供大家参考,具体内容如下 先看效果: 一、子组件 <template>     ...
    99+
    2022-09-27
  • vue递归组件怎么实现elementUI多级菜单
    这篇“vue递归组件怎么实现elementUI多级菜单”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“vue递归组件怎么实现e...
    99+
    2023-07-02
  • Vue中怎么递归多级菜单
    Vue中怎么递归多级菜单,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。考虑以下菜单数据:[  {  nam...
    99+
    2022-10-19
  • 怎么使用el-menu递归实现多级菜单组件
    今天小编给大家分享一下怎么使用el-menu递归实现多级菜单组件的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。1. 效果:2...
    99+
    2023-07-06
  • vue递归实现三级菜单
    本文实例为大家分享了vue递归实现三级菜单的具体代码,供大家参考,具体内容如下 父组件 <template> <div class="menu-leve...
    99+
    2022-11-12
  • el-menu递归实现多级菜单组件的示例
    目录1. 效果:2. 实现:3. 使用组件:1. 效果: 2. 实现: 创建外层菜单AsideMenu.vue组件和子菜单项AsideSubMenu.vue组件,在AsideS...
    99+
    2023-05-15
    el-menu多级菜单 el-menu递归菜单
  • 怎么使用Vue递归组件实现树形菜单
    本文小编为大家详细介绍“怎么使用Vue递归组件实现树形菜单”,内容详细,步骤清晰,细节处理妥当,希望这篇“怎么使用Vue递归组件实现树形菜单”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。效果如下图,点击后打开二级...
    99+
    2023-07-04
  • vue+quasar使用递归实现动态多级菜单
    本文实例为大家分享了vue+quasar使用递归实现动态多级菜单的具体代码,供大家参考,具体内容如下 效果图: 菜单初始化入口 menu.vue,初始化侧边栏菜单组建,<my...
    99+
    2022-11-13
  • vue+elementUI组件递归实现可折叠动态渲染多级侧边栏导航
    早就实现了功能,但是发现点击的时候,选中的菜单项背景色会变白,周五时候仔细观察了一下,发现并不是调整样式的问题,而是选项没有被选中,于是好好研究了一下组件递归这块,总结记录一下心路历...
    99+
    2022-11-12
  • Vue2递归组件如何实现树形菜单
    小编给大家分享一下Vue2递归组件如何实现树形菜单,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!效果如下图,点击后打开二级菜单,...
    99+
    2022-10-19
  • vue怎么实现左侧菜单树形图递归
    这篇文章主要讲解了“vue怎么实现左侧菜单树形图递归”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“vue怎么实现左侧菜单树形图递归”吧!先说说遇到的坑,由于是子父组件,当时传递使用的是子父组...
    99+
    2023-07-04
  • Vue3+TypeScript实现递归菜单组件的完整实例
    目录前言 需求 实现 首次渲染 点击菜单项 样式区分 默认高亮 数据源变动引发的 bug 完整代码 App.vue 总结 前言 小伙伴们好久不见,最近刚入职新公司,需求排的很满,平...
    99+
    2022-11-12
  • VUE递归树形怎么实现多级列表
    今天小编给大家分享一下VUE递归树形怎么实现多级列表的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。什么是递归简单来说就是在组...
    99+
    2023-07-02
  • vue中怎么实现左侧菜单和树形图递归
    本文小编为大家详细介绍“vue中怎么实现左侧菜单和树形图递归”,内容详细,步骤清晰,细节处理妥当,希望这篇“vue中怎么实现左侧菜单和树形图递归”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。效果图如下所示:先说说...
    99+
    2023-06-20
  • 怎么使用vue递归实现树形组件
    这篇文章主要介绍“怎么使用vue递归实现树形组件”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“怎么使用vue递归实现树形组件”文章能帮助大家解决问题。1. 先来看一下效果:2. 代码部分 (myTr...
    99+
    2023-07-02
  • Vue下如何用递归组件实现一个可折叠的树形菜单
    这篇文章主要介绍“Vue下如何用递归组件实现一个可折叠的树形菜单”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Vue下如何用递归组件实现一个可折叠的树形菜单”文章能帮助大家解决问题。在Vue.js中...
    99+
    2023-07-04
  • Vue.js中怎么利用递归组件构建树形菜单
    本篇文章给大家分享的是有关Vue.js中怎么利用递归组件构建树形菜单,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。在Vue.js中一个递归组件...
    99+
    2022-10-19
  • vue递归组件之如何实现简单树形控件
    这篇文章主要介绍vue递归组件之如何实现简单树形控件,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!1、递归组件-简单树形控件预览及问题 在编写树形组件时遇到的问题:组件如何...
    99+
    2022-10-19
  • Vue.js中怎么利用递归组件实现一个可折叠的树形菜单
    本篇文章给大家分享的是有关Vue.js中怎么利用递归组件实现一个可折叠的树形菜单,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。在Vue.js中...
    99+
    2022-10-19
  • 怎么使用el-upload组件实现递归多文件上传
    本篇内容介绍了“怎么使用el-upload组件实现递归多文件上传”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、需求描述:在页面上点击按钮...
    99+
    2023-07-05
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作