iview菜单menu封装成二级菜单和无限级菜单

ivew的menu封装成二级菜单和无限极菜单
demo中有注释,此处不赘述了

github地址:

效果:在这里插入图片描述
二级菜单封装:

<template>
  <div class='con'>

    <Menu :theme="theme2" style='width:240px;float:left'>
      <div v-for="(item,index) in menuList" :key="'menu'+index">
        <MenuItem :name="item.name" :to="item.to" v-if="typeof(item.children)!=='undefined' && item.children.length===0">
        <Icon type="ios-navigate"></Icon>
        <span>{{item.title}}</span>
        </MenuItem>

        <Submenu :name="item.name" v-else>
          <template slot="title">
            <Icon type="ios-paper" />
            <span>{{item.title}}</span>
          </template>
          <MenuItem :name="subItem.name" :to="subItem.to" v-for="(subItem,index) in item.children" :key="index">{{subItem.title}}</MenuItem>
        </Submenu>
      </div>
    </Menu>
    <div class='pad'>
      <router-view />
    </div>

  </div>

</template>
<script>
export default {
  data () {
    return {
      theme2: 'light',
      menuList: [
        {
          title: "内容管理",
          name: "1",
          children: [
            {
              title: "文章管理",
              name: "1-1",
              to: "/article"
            },
            {
              title: "评论管理",
              name: "1-2",
              to: "/comments"
            },
            {
              title: "举报信息",
              name: "1-3",
              to: "/report"
            },
            {
              title: "test1信息",
              name: "1-4",
              to: "/test1"
            }
          ]
        },
        {
          title: "用户管理",
          name: "2",
          children: [
            {
              title: "新增用户",
              name: "2-1",
              to: "/addUser"
            },
            {
              title: "活跃用户",
              name: "2-2",
              to: "/active"
            }
          ]
        },
        {
          title: "统计分析",
          name: "3",
          children: [
            {
              title: "新增和启动",
              name: "3-1",
              to: "/addAndStart"
            },
            {
              title: "活跃分析",
              name: "3-2",
              to: "activeAnalyze"
            },
            {
              title: "时段分析",
              name: "3-3",
              to: "/activeAnalyze"
            }
          ]
        },
        {
          title: "报表中心",
          name: "4",
          children: [
            {
              title: "数据报表",
              name: "4-1",
              to: "/activeAnalyze"
            },
            {
              title: "运营报表",
              name: "4-2",
              to: "/activeAnalyze"
            },
            {
              title: "操作报表",
              name: "4-3",
              to: "/activeAnalyze"
            },
            {
              title: "异步通知",
              name: "4-6",
              to: "/activeAnalyze"
            }
          ]
        }
      ]
    }
  }
}
</script>
<style lang="less" scoped>
.con {
  width: 100%;
  display: flex;
  .pad {
    margin: 5px;
    float: left;
    background: red;
    flex: 1;
  }
}
</style>

无限极菜单封装:
子组件代码:

<template>
  <Submenu :name="menuList.name">
    <!-- 父级菜单 -->
    <template slot="title">
      <Icon :type="menuList.icon" />
      <span>{{ menuList.title }}</span>
    </template>
    <template v-for="item in menuList.children">
      <!-- 如果还有子集,继续调用   -->
      <left-menu-nav v-if="item.children&&item.children.length!==0" :menuList='item' :key='item.index'>
      </left-menu-nav>
      <!-- 子菜单  -->
      <menu-item v-else :key="item.id" :name="item.name" :to="item.to">
        {{item.title}}
      </menu-item>
    </template>
  </Submenu>
</template>
<script>
export default {
  name: 'leftMenuNav',
  props: {
    menuList: {
      type: Object,
      default: () => { }
    }
  },
  data () {
    return {
      theme2: 'light',

    }
  }
}
</script>
<style lang="less" scoped>
</style>


父组件代码:

<template>
  <!-- 无限级 -->
  <div class='con'>
    <Menu :theme="theme2" accordion>
      <template :name="item.name" v-for="item in menuList">
        <!-- 有子菜单 -->
        <left-menu-nav v-if="item.children&&item.children.length!==0" :menuList='item' :key='item.name'>
        </left-menu-nav>
        <!-- 无子菜单 -->
        <menu-item v-else :name="item.name" :to="item.to" :key='item.name'>{{item.title}}</menu-item>
      </template>
    </Menu>
    <div class='pad'>
      <router-view />
    </div>
  </div>

</template>
<script>
// eslint-disable-next-line no-unused-vars
import leftMenuNav from '@/common/About.vue'
export default {
  name: 'leftMenu',
  components: {
    leftMenuNav
  },
  data () {
    return {
      name: 'menu',
      theme2: 'light',
      menuList: [
        {
          title: "oralinge",
          name: "0",
          to: '/oralinge'
        },
        {
          title: "模块管理",
          name: "1",
          children: [
            {
              title: "文件管理",
              name: "1-1",
              children: [
                {
                  title: "路由管理",
                  name: "1-1-1",
                  children: [
                    {
                      title: "代码管理",
                      name: "1-1-1-1",
                      to: "/code"
                    }
                  ]
                },
                {
                  title: "组件管理",
                  name: "1-1-2",
                  to: "/con"
                }
              ]
            },
            {
              title: "产品管理",
              name: "1-2",
              to: "/pro"
            },
            {
              title: "商户管理",
              name: "1-3",
              to: "/mer"
            },
            {
              title: "合同信息",
              name: "1-4",
              to: "/contract"
            }
          ]
        },
        {
          title: "架构管理",
          name: "2",
          children: [
            {
              title: "webpack",
              name: "2-1",
              to: "/webpack"
            },
            {
              title: "gulp",
              name: "2-2",
              to: "/gulp"
            }
          ]
        },
        {
          title: "生死簿",
          name: "3",
          children: [
            {
              title: "白名单",
              name: "3-1",
              to: "/Whitelist"
            },
            {
              title: "黑名单",
              name: "3-2",
              to: "blacklist"
            }
          ]
        },
        {
          title: "数据中心",
          name: "4",
          children: [
            {
              title: "报表数据",
              name: "4-1",
              to: "/data"
            }
          ]
        }
      ]
    }
  }
}
</script>
<style lang="less" scoped>
.con {
  width: 100%;
  display: flex;
  .pad {
    margin: 5px;
    float: left;
    background: red;
    flex: 1;
  }
}
</style>


  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值