Vue+elementUI实现 封装el-menu导航栏

效果图
在这里插入图片描述

子组件menus.vue

<template>
	    <div>
	      <template v-for="list in this.menuList" >  
	        <el-submenu :index="list.resourceId" v-if="list.children.length>0" :key="list.resourceId"   > 
	          <template slot="title"  >
	            <i v-if="list.icon" class="el-icon-menu"></i>
	            <span slot="title">{{ list.resourceName}}</span>
	          </template>
	          <!-- 当有子集数据使用自调用,:menuList通过props传递 -->
	          <Menu :menuList="list.children"></Menu> 
	        </el-submenu>
	        <el-menu-item v-else :index="list.resourceId"  :key="list.resourceId">
	          <i v-if="list.icon" class="el-icon-menu"></i>
	          <span>{{list.resourceName}}</span>
	        </el-menu-item>
	      </template>
	    </div> 
    </template>
    <script>
	    export default{
	        name:'Menu',//递归组件的关键,并且要与引入组件的变量名称一致
	        data(){
	            return {
	            }
	        },
	        props:['menuList']
	   }
</script>
<style>  
 .el-menu--collapse  span,   .el-menu--collapse  i.el-submenu__icon-arrow   {
	    height: 0;
	    width: 0;
	    overflow: hidden;
	    visibility: hidden;
	    display: inline-block; 
 } 
</style>

父组件demo.vue

<template>
  <div class="menu_class">
    <el-menu
      class="el-menu-vertical-demo"
      background-color="rgb(73, 80, 96)"
      text-color="rgba(255,255,255,0.7)"
      unique-opened
    >
      <Menu :menuList="this.menuList"></Menu>
    </el-menu>
  </div>
</template>

<script>
import Menu from "./menus.vue";
import menudata from "./menuList.json";
export default {
  components: {
    Menu, 
  },
  data() {
    return {
      menuList: menudata,
    };
  },
  created() {
    console.log(menudata);
  },
  methods: {
  },
};
</script>

<style  scoped>
.menu_class {
  width: 600px;
}
</style>

模拟数据menuList.json

[
    {
        "resourceId": "1",
        "icon":true,
        "resourceName": "一级菜单1",
        "children": [
            {
                "resourceId": "12",
                "resourceName": "二级菜单1",
                "children": [
                    {
                        "resourceId": "122",
                        "resourceName": "三级菜单",
                        "children": [
                            {
                                "resourceId": "1222",
                                "resourceName": "四级级菜单1",
                                "children": [
                                    {
                                        "resourceId": "12221",
                                        "resourceName": "五级级菜单1",
                                        "children": []
                                    },
                                    {
                                        "resourceId": "12222",
                                        "resourceName": "五级级菜单2",
                                        "children": []
                                    },
                                    {
                                        "resourceId": "12223",
                                        "resourceName": "五级级菜单3",
                                        "children": []
                                    }
                                ]
                            }
                        ]
                    }
                ]
            },
            {
                "resourceId": "13",
                "resourceName": "二级菜单2",
                "children": []
            }
        ]
    }, {
        "resourceId": "2",
        "icon":true,
        "resourceName": "一级菜单2",
        "children": [
            {
                "resourceId": "12",
                "resourceName": "二级菜单1",
                "children":[]
            }
        ]
    }, {
        "resourceId": "3",
        "icon":true,
        "resourceName": "一级菜单3",
        "children": []
    }
]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值