当前位置:   article > 正文

【Vue2+Element ui通用后台】头部_前端vue2 elementui header 顶部

前端vue2 elementui header 顶部

文章目录

header

在 components 中新建 CommonHeader.vue 组件来完成头部组件的编写

<template>
  <div class="header-container">
    <div class="l-content">
      <el-button icon="el-icon-menu" size="mini"></el-button>
      <span class="text">首页</span>
    </div>
    <div class="r-content">
      <el-dropdown>
        <span class="el-dropdown-link">
          <img class="user" src="../assets/logo.png"/>
        </span>
        <el-dropdown-menu slot="dropdown">
          <el-dropdown-item>个人中心</el-dropdown-item>
          <el-dropdown-item>退出</el-dropdown-item>
        </el-dropdown-menu>
      </el-dropdown>
    </div>
  </div>
</template>

<script>
export default {
  data() {
    return {};
  },
  methods: {},
}
</script>

<!-- Add "scoped" attribute to limit CSS to this component only -->
<style lang="less" scoped>
.header-container {
  padding: 0 20px;
  background-color: #333;
  height: 60px;
  display: flex;
  justify-content: space-between;
  align-items: center;

  .text {
    color: white;
    font-size: 14px;
    margin-left: 10px;
  }

  .r-content{
    .user{
      width: 40px;
      height: 40px;
      border-radius: 50%;
    }
  }
}
</style>

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55

然后在 Main.vue 中引入,同时去掉左侧的空隙,增加样式

<template>
  <div>
    <el-container>
      <el-aside width="200px">
        <CommonAside />
      </el-aside>
      <el-container>
        <el-header>
          <common-header/>
        </el-header>
        <el-main><router-view></router-view></el-main>
      </el-container>
    </el-container>
  </div>
</template>

<script>
import CommonAside from "@/components/CommonAside";
import CommonHeader from "@/components/CommonHeader";
export default {
  name: "Main",
  components:{
    CommonAside,
    CommonHeader
  }
}
</script>

<style scoped>
.el-header{
  padding: 0;
}
</style>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33

其中右侧我们用的是 Dropdown 下拉菜单,直接复制示例代码改下就可以,运行程序,效果如下:
在这里插入图片描述
下面我们实现点击头部的图标切换左侧菜单的展开、收缩状态,要实现这个功能,我们用到了 Vuex,由于我们用的是 vue2,所以可以看这个文档:VueX v3.x,在之前的学习中,我写过关于 vuex 的笔记了,可以点击:之前Vuex的学习笔记 来查看

首先需要引入 npm i vuex@3.6.2,安装成功后,我们在 src 下新建 store 文件夹,然后新建 tab.js 用来管理左侧菜单

export default {
    state:{
        isCollapse:false//控制菜单展开/收起
    },
    mutations:{
        // 修改菜单展开、收起的方法
        collapseMenu(state){
            state.isCollapse = !state.isCollapse;
        }
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

然后新建 index.js

import Vue from 'vue'
import Vuex from 'vuex'
import tab from './tab'

Vue.use(Vuex)

export default new Vuex.Store({
    modules:{
        tab
    }
})
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

最后需要在 main.js 中挂载的 vue 实例中


import store from './store'
......

new Vue({
  router,
  store,
  render: h => h(App),
}).$mount('#app')

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

接下来我们在头部的按钮增加点击事件,修改 CommonHeader.vue

<template>
  <div class="header-container">
    <div class="l-content">
      <el-button icon="el-icon-menu" size="mini" @click="handleMenu"></el-button>
      ......
    </div>
    ......
  </div>
</template>

<script>
export default {
  data() {
    return {};
  },
  methods: {
    handleMenu(){
      this.$store.commit('collapseMenu')
    }
  },
}
</script>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

之所以我们能在这里使用this.$store就是因为我们在上一步把在 main.js 中把 store 挂载到了 vue 实例上,按钮增加了点击事件,调用了collapseMenu方法,修改了 isCollapse 的值

然后我们在 CommonAside.vue 中使用即可,我们需要在 computed 下定义一个变量,返回 vuex 对应模块的对应字段即可

computed:{
    ......
    isCollapse(){
      return this.$store.state.tab.isCollapse;
    }
  }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

而菜单中 collapse 来控制是否展开或折叠,直接使用刚才 computed 中定义的变量即可

<el-menu
        ......
        :collapse="isCollapse"
       	......>
     ......
    </el-menu>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

现在效果如下:
在这里插入图片描述
现在修改一些细节,当折叠后,左侧的 通用后台管理 的文字 需要展示为 后台,修改 CommonAside 页面,根据是否折叠展示相应文字即可

<h3>{{isCollapse?'后台':'通用后台管理'}}</h3>
  • 1

然后折叠后,头部和左侧有一段距离,这是因为在 Main.vue 中,我们的el-aside有一个固定宽度,我们改为自适应即可

<el-aside width="auto">
	<CommonAside />
</el-aside>
  • 1
  • 2
  • 3

然后左侧菜单的右侧和头部连接的地方有一个空隙,查看样式是因为有一个 border,所以修改 CommonAside 的样式:

<style lang="less" scoped>
......
.el-menu{
  ......
  border-right: none;
}
</style>

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

运行程序:
在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/971812
推荐阅读
相关标签
  

闽ICP备14008679号