Element 实现导航栏收起展开功能

首先给 el-menu 加上 :collapse="isCollapse"属性,这个属性也是element上的一个参数,意思是是否开启折叠动画,在data中定义isCollapse,用true和false控制展开与收起。

vue:

 

这里还需要把 el-aside 的宽度设置为跟 el-menu 一样,以免出现执行展开收起时宽度不一样。

  <!-- width的宽度跟collapse一样动态控制 -->
  <el-aside width="collapse"></el-aside>

这里我是将展开收起利用两个icon图标,通过点击事件来动态控制的,v-show"block" , block:true 是默认显示第一个图标,当我们点击图标收起导航菜单栏然后第一个图标隐藏,第二个图标出现, v-show"toggle"toggle:false 是第二个图标默认隐藏,当隐藏导航栏菜单,第二个图标出现,然后点击第二个图标展开导航栏。

   <el-header>
          <!-- 点击展开收起导航和切换对应图标 -->
          <i class="el-icon-s-fold" @click="isC" v-show="block"></i>
          <i class="el-icon-s-unfold" @click="isC" v-show="toggle"></i>
   </el-header>

data:

export default {
     
  name: "Main",
  data() {
     
    return {
     
      isCollapse: false, //导航栏默认为展开
      toggle: false,//第二个图标默认隐藏
      block: true,//默认显示第一个图标
    };
  },
};

js:

  methods: {
     
    // 动态控制展开与收起和切换对应图标
    isC() {
     
      this.isCollapse = !this.isCollapse;
      this.toggle = !this.toggle;
      this.block = !this.block;
    },
  },

css:

.el-menu-vertical:not(.el-menu--collapse) {
     
  width: 240px;
}

最后附上完整代码:

<template>
  <div>
    <el-container>
      <!-- width的宽度跟collapse一样动态控制 -->
      <el-aside width="collapse">
        <!-- :collapse="isCollapse"   class="el-menu-vertical" 动态控制导航菜单的收起与展开  router:让index作为 path 进行路由跳转 -->
        <el-menu
          :default-active="$route.path"
          router
          :collapse="isCollapse"
          class="el-menu-vertical"
          background-color="#393e42"
          text-color="#fff"
          active-text-color="rgb(64, 158, 255)"
        >
          <el-submenu index="1">
            <!-- 插槽 插入一级导航标题 -->
            <template slot="title">
              <i class="el-icon-s-tools"></i>
              <span>工厂设置</span>
            </template>
            <!-- 二级导航标题 -->
            <el-menu-item-group>
              <el-menu-item index="/A-Business/A-Business">
                <i class="el-icon-s-shop"></i>商户信息
              </el-menu-item>
              <el-menu-item index="/B-Extension/B-Extension">
                <i class="el-icon-s-flag"></i>推广团队
              </el-menu-item>
              <el-menu-item index="/C-Management/C-Management">
                <i class="el-icon-menu"></i>插件管理
              </el-menu-item>
              <el-menu-item index="/D-customer/D-customer">
                <i class="el-icon-s-custom"></i>我的客户
              </el-menu-item>
            </el-menu-item-group>
          </el-submenu>
        </el-menu>
      </el-aside>
      <el-container>
        <el-header>
          <div class="box_bgd" @click="isC">
            <!-- 点击展开收起导航和切换对应图标 -->
            <i class="el-icon-s-fold" v-show="block"></i>
            <i class="el-icon-s-unfold" v-show="toggle"></i>
          </div>
        </el-header>
        <el-main>
          <router-view></router-view>
        </el-main>
      </el-container>
    </el-container>
  </div>
</template>

<script>
export default {
     
  name: "Main",
  data() {
     
    return {
     
      isCollapse: false, //导航栏默认为展开
      toggle: false, //第二个图标默认隐藏
      block: true, //默认显示第一个图标
    };
  },
  methods: {
     
    // 动态控制展开与收起和切换对应图标
    isC() {
     
      this.isCollapse = !this.isCollapse;
      this.toggle = !this.toggle;
      this.block = !this.block;
    },
  },
};
</script>

<style scoped>
.el-header {
     
  background-color: #b3c0d1;
  color: #333;
  line-height: 60px;
  height: 100%;
  padding: 0 !important;
}

.el-aside {
     
  background-color: #393e42;
  color: #333;
  height: 100vh;
}
.el-menu {
     
  border-right-width: 0;
}
.el-main {
     
  color: #333;
}
.el-menu-vertical:not(.el-menu--collapse) {
     
  width: 240px;
}
.box_bgd {
     
  height: 60px;
  display: flex;
  align-items: center;
  justify-content: center;
  cursor: pointer;
  width: 54px;
}
.box_bgd i {
     
  font-size: 20px;
}
.box_bgd:hover {
     
  background-color: rgb(203, 215, 230);
}
</style>

效果如下:

Element 实现导航栏收起展开功能_第1张图片

你可能感兴趣的:(vue,elementui)