后台管理系统菜单栏的展开与收起

19 篇文章 0 订阅

最近写项目用到了这个功能,现在来和大家分享一下

首先我的NavMenu组件,和el-header中的控制菜单展开收起的hambuger按钮是两个分别封装过的组件,是兄弟关系。

NavMenu组件封装的代码如下:

<template>
  <div class="side">
    <h5 class="title" v-show="!collapse">学生证后台管理系统</h5>
    <el-menu
      default-active="admin"
      class="el-menu-vertical-demo"
      background-color="#191a23"
      :unique-opened="true"
      :router="true"
      text-color="#fff"
      active-text-color="#4d70ff"
      :collapse="collapse"
    >
      <el-menu-item index="/admin">
        <i class="el-icon-s-home"></i>
        <span>首页</span>
      </el-menu-item>
      <el-submenu index="1" >
        <template slot="title">
          <i class="el-icon-location"></i>
          <span>单位管理</span>
        </template>
        <el-menu-item-group>
          <el-menu-item index="/admin/school">添加学校</el-menu-item>
          <el-menu-item index="/admin/grade">添加年级</el-menu-item>
          <el-menu-item index="/admin/class">添加班级</el-menu-item>
        </el-menu-item-group>
      </el-submenu>
      <el-submenu index="2" >
        <template slot="title">
          <i class="el-icon-user-solid"></i>
          <span>教师管理</span>
        </template>
        <el-menu-item-group>
          <el-menu-item index="/admin/headmaster">班主任</el-menu-item>
          <el-menu-item index="/admin/teachers">教师</el-menu-item>
          <el-menu-item index="/admin/manage">年级管理者</el-menu-item>
          <el-menu-item index="/admin/principal">校长</el-menu-item>
        </el-menu-item-group>
      </el-submenu>
      <el-submenu index="3">
        <template slot="title">
          <i class="el-icon-s-promotion"></i>
          <span>通知</span>
        </template>
        <el-menu-item-group>
          <el-menu-item index="/admin/regular">定时通知</el-menu-item>
          <el-menu-item index="/admin/temporary">临时通知</el-menu-item>
        </el-menu-item-group>
      </el-submenu>
    </el-menu>
  </div>
</template>
<script>
import bus from '@/assets/js/bus'
export default {
  data(){
    return{
      collapse:false
    }
  },
  created(){
    bus.$on('toggleClick',msg=>{
       this.collapse=msg
    })
  }
};
</script>

<style lang="less" scoped>
.title {
  color: #fff;
  font-size: 20px;
  height: 40px;
  line-height: 40px;
}
.el-menu-vertical-demo {
  text-align: left;
}
.el-submenu,
.el-menu,
.el-menu-item-group,
.el-menu-item {
  width: 200px;
}
</style>

hambuger封装的代码如下:

<template>
  <div style="padding: 0 15px;" @click="toggleClick">
    <svg
      :class="{'is-active':isActive}"
      class="hamburger"
      viewBox="0 0 1024 1024"
      xmlns="http://www.w3.org/2000/svg"
      width="64"
      height="64"
    >
      <path d="M408 442h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8zm-8 204c0 4.4 3.6 8 8 8h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56zm504-486H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zm0 632H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zM142.4 642.1L298.7 519a8.84 8.84 0 0 0 0-13.9L142.4 381.9c-5.8-4.6-14.4-.5-14.4 6.9v246.3a8.9 8.9 0 0 0 14.4 7z" />
    </svg>
  </div>
</template>

<script>
import bus from '@/assets/js/bus'
export default {
  name: 'Hamburger',
  data(){
    return{
      isActive:false
    }
  },
  methods: {
    toggleClick() {
      this.isActive = !this.isActive
      bus.$emit('toggleClick',this.isActive)
    }
  }
}
</script>

<style scoped>
.hamburger {
  display: inline-block;
  vertical-align: middle;
  width: 20px;
  height: 20px;
}

.hamburger.is-active {
  transform: rotate(180deg);
}
</style>

在components/index.js下实现全局注册:

import sidebar from '@/components/sidebar'
import breadcrumb from '@/components/Breadcrumb'
import dropdown from '@/components/dropdown'
import hamburger from '@/components/Hamburger'
import Vue from 'vue'
export default(Vue)=>{
    Vue.component('sidebar',sidebar)
    Vue.component('breadcrumb',breadcrumb)
    Vue.component('dropdown',dropdown)
    Vue.component('hamburger',hamburger)
}

最重要的步骤来啦!!!

通过el-menu的collapse属性来控制菜单栏的展开与收起

我是通过点击hamburge按钮来控制菜单栏的展开与收起,通过EvenBus来实现兄弟组件间的传值。具体步骤如下:

1.在assets/js下边创建bus.js文件

import Vue from 'vue'

// 使用evenbus
const bus = new Vue()
export default bus

2.在hamburge组件中通过触发toggleClick发送要传的参数

3.在NavMenu组件中接收 ,来实现菜单栏的展开与收起

 4.在el-sider中也要使用EvenBus传来的参数来实现,侧边栏宽度的变化

如有错误希望大家多多指教~ 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值