element-ui 菜单模板封装(递归)

1.使用vue-cli后src路径找个文件夹创建menu.vue;

注意:
1.数据需要通过父页面传递进来,在模板中会造成数据溢出

  1. 模板需要有name属性,调用模板的父页面的组件名称和模板name需一致,才能实现递归。
//menu.vue;
<template>
    <div>
      <template v-for="list in this.menuList" >  //循环数据;数据menuList通过props传递
        <el-submenu index="1" v-if="list.children.length>0" :key="list.resourceId" :index="list.resourceName"  > 
          <template slot="title"  style="padding-left:10px" >
            <i class="el-icon-menu"></i>
            <span slot="title">{{ list.resourceName}}</span>
          </template>
          <Menu :menuList="list.children"></Menu> //当有子集数据再次使用这个模板,:menuList通过props传递
        </el-submenu>
        <el-menu-item v-else :index="list.resourceName"  :key="list.resourceId" style="padding-left: 50px;">
          <span>{{list.resourceName}}</span>
        </el-menu-item>
      </template>
    </div>
</template>
<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>
<script>
    export default{
        name:'Menu',//模板名称
        data(){
            return {

            }
        },
        beforeMount(){
        },
        props:['menuList']

    }
</script>

2.父页面使用组件;

//template部分
     <el-menu
               class="el-menu-vertical-demo"
               :collapse="isCollapse"
               background-color="rgb(73, 80, 96)" //背景颜色:此备注说明用,实际开发需要删除,否则报错
               text-color="rgba(255,255,255,0.7)" //字体颜色:此备注说明用,实际开发需要删除,否则报错
               unique-opened        //只打开一个菜单:此备注说明用,实际开发需要删除,否则报错
        >
        <Menu :menuList="this.menuList"></Menu>
      </el-menu>
//script部分 
 import Menu from './main-components/menu.vue'; //引进菜单模板
 import {menudata} from '../data/menu.js';     //菜单数据
 export default{
        data(){
            return {
              isCollapse:false,//菜单展开功能
              unCollapse:{
                width:'220px'
              },
              collapse:{
                width:'50px'
              },
              unCollapseMain:{
                paddingLeft:'220px'
              },
              collapseMain:{
                paddingLeft:'50px'
              },
              menuList:menudata.obj
            }
        },
        methods:{
          toggleClick(){//菜单展开功能
            this.isCollapse=!this.isCollapse;
          }
        },
        components:{
          Menu//使用菜单组件
        }
    }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,951评论 19 139
  • 常常 有这么一群人 心中装满梦想 也不缺行动 对新事物也能 火热三分 却很少在一件事物上 停留太久 像是一个流浪的...
    米咖说阅读 262评论 0 0