vue+elementUI 做的递归组件

废话少说,直接上最新鲜的干货

当然,你得提前安装好bootstrap,router,element-ui,vue-axios

1.上递归组件,此处参考了某位大神的代码,具体不知道是谁,因为到处都有人用

<template>
    <div>

    <template v-for=‘menu in menuList‘>
        <!-- 如果当前有子菜单,则显示 el-submenu ,在el-subment 里调用 递归组件 -->
        <el-submenu
                v-if=‘menu.children.length>0‘
                :index=‘menu.name‘
                :key="menu.id"
        >
            <template slot="title" >
                <i :class="menu.icon"></i>
                {{menu.name}}
            </template>
            <!-- 调用自身  此处是重点-->

            <MenuTree :menuList=‘menu.children‘></MenuTree>

        </el-submenu>
        <!-- 如果没有子菜单,则显示当前内容 -->
        <el-menu-item
                v-else
                :index=‘menu.url‘
                :key=‘menu.id‘
        >
            <i :class="menu.icon"></i>
            {{menu.name}}
        </el-menu-item>

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

<script>
    export default {
        name: "MenuTree",
        props: {
            menuList: {
                type: Array,
                required: false
            }
        }
    }
</script>

<style scoped>

</style>

2.子组件菜单(Menus)

<template>

        <el-scrollbar wrap-class="scrollbar-wrapper">
            <el-menu
                    router
                    mode="vertical"
                    background-color="#551A8B"
                    text-color="#FFFFFF"
                    active-text-color="#409EFF"
                    v-if="menuList"
            >
<!--                <sidebar-item v-for="menu in menuList" :key="menu.id" :item="menu" />-->
                <MenuTree :menuList="menuList"></MenuTree>
            </el-menu>
        </el-scrollbar>

</template>
<script>

    import MenuTree from "./MenuTree";
    export default {
        name:‘Menus‘,
        components: {

            MenuTree,
        },
        props:{
            menuList: {
                type: Array,
                required: false
            }
        }
    }
</script>
<style >

    a {
        display: inline-block;
        width: 100%;
        overflow: hidden;
    }
    .el-menu {
        border: none;
        height: 100%;
        width: 100% !important;
    }
    .is-active > .el-submenu__title{
        color: #f4f4f5!important;
    }

</style>

3.父组件(App.Vue)引用

<template>
    <el-container>
        <el-header>
            XXXXXX
        </el-header>
        <el-container>
            <el-aside >
                <Menus :menuList="menuList"></Menus>
            </el-aside>
            <el-main>
                <router-view></router-view>
            </el-main>
        </el-container>
    </el-container>
</template>

<script>
    import Menus from "./views/Menus";

    export default {
        name: ‘app‘,
        components: {
            Menus,
        },

        props: {
            menuList: {
                type: Array,
                required: false
            }
        },
        mounted(){
            this.axios.get(‘/menu/list‘)
                .then(resp => {
                    this.menuList = resp.data.menuList;
                })
        }

    }
</script>

<style>
    .el-header {
        background-color: #0000AA;
        color: #ffffff;
        line-height: 60px;
        font-size: 28px;
    }
    .el-aside {
        background-color: #e3e3e3;
        width: 200px !important;
    }

    body .el-table th.gutter{
        display: table-cell!important;
    }
    body .el-table colgroup.gutter {
        display: table-cell !important;
    }

</style>

4.总结

递归组件得重中之重,父组件与子组件、递归组件中都有共同的props,传值的过程:父组件menuList --> 菜单组件menuList --> 递归组件使用menuList

原文地址:https://www.cnblogs.com/theworld/p/12077418.html

时间: 2024-10-09 03:43:48

vue+elementUI 做的递归组件的相关文章

vue.js 树菜单 递归组件树来实现

参照前辈方法实现的,觉得不错,记录一下: 父组件: <!-- 菜单树 --> <ul class="T_down" v-for="(menuItem,index) in customerArray" :key="index"> <tree-menu :treeData="menuItem"></tree-menu> </ul> import treeMenu from

vue + elementui 中的弹窗组件封装成公共组件

如果一个弹窗比较简单,可以直接放在页面中,通过visible属性的true,false控制显示隐藏就可以了,我们今天要说的是将个比较复杂的弹窗组件封装成全局组件,然后可以在项目中的任何一个页面引用~~下面走起 1.首先要注册个全局组件,用下面的全局API  Vue.component('my-component', { /* ... */ }) 在js文件中首先引入这个弹窗组件,组件名称是iesPersonRadioDialog,项目中会引入一个js文件,这个js文件中在分别引入其他的js,模块

vue+elementui的导航滑块组件

工作需要做一个带滑块效果的导航栏,初步想法是用element的导航组件去做,后面摸坑结合各位大佬的博客初步实现效果,话不多说,直接上代码,记录一下爬坑之旅 1 <template> 2 <div class="y-nav"> 3 <el-row class="nav"> 4 <el-menu 5 :default-active="$route.path" 6 class="el-menu-dem

vue+element-ui做表格的导出功能(一)。

一.安装插件: npm install -S file-saver xlsx npm install -D script-loader 二.下载js文件,并用新建文件夹: 链接:https://pan.baidu.com/s/1wNyTHAc9RNNN1EB2Ta3Hfg 提取码:jbwa 复制这段内容后打开百度网盘手机App,操作更方便哦 在main.js文件夹引入: 更改Export2Excel.js文件,如下: 在vue文件中引入: import {export_json_to_excel

Vue两种组件类型介绍:递归组件和动态组件

一递归组件 递归组件的特性就是可以在自己的template模板中调用自己本身.值得注意的它必须设置name属性. // 递归组件 recursive.vue <template> <div> <p>递归组件</p> <Recursion :count="count + 1" v-if="count < 3"></Recursion> </div> </template&g

Vue组件的操作-自定义组件,动态组件,递归组件

作者 | Jeskson 来源 | 达达前端小酒馆 v-model双向绑定 创建双向数据绑定,v-model指令用来在input,select,checkbox,radio等表单控件.v-model指令在内部使用不同的属性为不同的输入元素抛出不同的事件. v-mdel指令实现数据的双向绑定: <div> 用户名:<input type="text" v-model="name"> </div> 输入用户名是:{{name}} &l

vue element-ui 日期选择器组件 日期时间格式化

vue element-ui 组件开发大大提高了我们的效率,但有时候并不能满足我们的需求,例如时间,日期组件: element-ui 日期返回的格式是这样的,看下图: 但我们要的是另一个格式 , 如下图: 怎么解决? 可以用一个插件 moment.js 解决 1:下载,安装 npm install moment --save 2:引用,我这里是全局引用,并用原型链把方法挂到了vue上面,看下图: 3:使用,看下图: moment(date).format("YYYY-MM-DD HH:mm:ss

vue递归组件 (树形控件 )

首先我们要知道,既然是递归组件,那么一定要有一个结束的条件,否则就会使用组件循环引用,最终出现“max stack size exceeded”的错误,也就是栈溢出.那么,我们可以使用v-if="判断条件"作为递归组件的结束条件.当遇到v-if为false时,组件将不会再进行渲染 1. 准备一个树状的递归数据 navigation: [ { types: 1, id: "0", name: "首页", path: "/jiaowu_sy

谈谈Vue的递归组件

2月最后一天,而且还四年一遇,然而本月居然一篇博客没写,有点说不过去.所以,今天就来谈谈Vue的递归组件.我们先来看一个例子: See the Pen 递归组件 by imgss (@imgss) on CodePen. 什么是递归组件 上面这个例子,就是用递归组件实现的.递归组件,顾名思义,就是自己的内部实现又调用自己的组件.比如Vue官方给的treeView的例子,父目录下有子目录,子目录下还有子目录,子子孙孙,无穷尽也.就像俄罗斯套娃. 代码结构大概长下面这样子,需要注意递归组件与一般组件