Vue+ELementUI主页布局----侧边栏布局(el-aside)

news2025/2/27 11:27:45

第一节Login.vue登录表单知识:

 Element-UI+vue实现登录表单_我爱布朗熊的博客-CSDN博客

具体Element-UI地址:

Element - The world's most popular Vue UI framework
 

目录

一、布满整个页面

二、主页Header布局

三、主页左侧带单布局

四、axios请求拦截器添加token,保证拥有获取数据的权限

五、发起请求获取左侧菜单数据

六、左侧菜单UI绘制

6.1优化一级菜单

6.2当打开一个一级菜单后其他一级菜单关闭

6.3实现左侧菜单的折叠与展开功能


一、布满整个页面

如图所示,当我们使用UI库中的组件之后,发现我们导入的组件并不能布满全局,现在我们应该想办法解决

经过我们的筛选,我们发现是因为el-container的原因没有布满全屏,现在我们应该来修改一下

而且这个container就是我们Home.vue组件中最外层的container。

 

因为最外层的container比较特殊,我们特别的给她一个类名

   <el-container class="home-container">
       <!--头部  -->
       <el-header>Header</el-header>
       <!-- 页面主体区  嵌套容器  包裹 Aside与Main -->
       <el-container>
             <!-- 左侧 -->
             <el-aside width="200px">Aside</el-aside>
             <!-- 主体 -->
             <el-main>Main</el-main>
       </el-container>
   </el-container>

<style scoped lang="less">
    // 标签的名字就是类的名字
   .home-container{
    height: 100%;
   }
  .el-header{
     background-color: #373D41;
  }

  .el-aside{
    background-color: #333744;
  }

  .el-main{
    background-color: #EAEDF1;
  }
</style>

最终完成我们需要的效果

二、主页Header布局

<template>
   <el-container class="home-container">

       <!--头部  -->
       <el-header>
           <div>
              <img src="../assets/heima.png" alt="">
              <span>电商后台管理系统</span>
           </div>
           <!-- 退出按钮 -->
            <el-button type="info" @click="logout">退出</el-button>
       </el-header>


       <!-- 页面主体区  嵌套容器  包裹 Aside与Main -->
       <el-container>
             <!-- 左侧 -->
             <el-aside width="200px">Aside</el-aside>
             <!-- 主体 -->
             <el-main>Main</el-main>
       </el-container>


   </el-container>
</template>

<script >

export default{
  name:'Home',

   methods:{
    // 退出操作 
    logout(){
    // 清空token
     window.sessionStorage.clear()
    //  将登录页面转入到登录界面
    this.$router.push('/login')
    }
   }
}
</script>


<style scoped lang="less">
    // 标签的名字就是类的名字
   .home-container{
    height: 100%;
   }
  .el-header{
     background-color: #373D41;
     display: flex;
     justify-content: space-between;
     padding-left: 0px;
    //  居中
     align-items:center;
    //  文本颜色
    color:#fff;
    // 文字大小
    font-size: 20px;

    // 给header中嵌套的div进行样式改造
    // 子代选择器
    >div{
      display:flex;
    //   纵向居中
      align-items:center;

    //   在给div中的span改造样式
       >span{
        margin-left: 20px;
       }
    }
  }

  .el-aside{
    background-color: #333744;
  }

  .el-main{
    background-color: #EAEDF1;
  }
</style>

三、主页左侧带单布局

我们要实现的效果就是下图中的效果 :

  其中一级菜单要用<el-submenu>标签,二级菜单要在一级菜单内,要使用<el-menu-item>

其中一级菜单使用<el-submenu>标签之后,还可以再在里面嵌套一个<el-submenu>标签标签作为二级菜单,再在二级菜单中加一个<el-menu-item>三级菜单

  在一级菜单或二级菜单中涉及标题的内容的时候可以使用span标签(指定菜单的文本)

  其中的i标签就是来指定图标选项(就是文字左侧的小图标),具体情况如下图所示

我们也可以通过template标签给菜单指定图标i和文本span

四、axios请求拦截器添加token,保证拥有获取数据的权限

复习链接:

axios——难点语法使用、拦截器的使用、取消请求功能演示_我爱布朗熊的博客-CSDN博客

config就是请求对象,具体内容如下所示

.request就是一个请求拦截器,使用use函数为请求拦截器挂载一个回调函数

在发送请求时,会优先调用use函数

return config就说明给请求头做了一个预处理

 下面的我们的操作要根据后台的API接口进行工作

 在main.js中做出添加拦截器的操作

五、发起请求获取左侧菜单数据

当我们一登录完成之后,就应该立即获取左侧菜单,在页面进行展示

下图是res对象中的各种值

代码:    暂时还没有效果图,等到渲染完成之后效果图一起展示

export default{
  name:'Home',
  data(){
   return{
    // 左侧菜单数据
    menulist:[]
   }
  },
  created(){
        // 获取左侧所有菜单(我们自己定义的一个方法)
      this.getMenuList()
  },

   methods:{
        // 退出操作 
        logout(){
        // 清空token
        window.sessionStorage.clear()
        //  将登录页面转入到登录界面
        this.$router.push('/login')
        },
       
        // 获取所有的左侧菜单
        async getMenuList(){
        const {data:res} =  await this.$http.get('menus')
        if(res.meta.status !==200)
          return this.$message.error(res.meta.msg)
          //运行到这里说明成功了
          this.menulist = res.data 
        }
   },


}

六、左侧菜单UI绘制

我们在获取左侧侧边栏的数据的时候写过 this.menulist = res.data,且从下图中我们可以看出来,data就是一个一级菜单,通过children属性又嵌套了二级菜单,我们需要将其渲染到左侧侧边栏

我们将使用了两个for循环,第一个for循环遍历一级菜单,第二个for循环遍历二级菜单

                <el-menu background-color="#545c64" text-color="#fff" active-text-color="#ffd04b">
                 
                  <!-- 一级菜单 -->
                  <!-- :index="item.id" 如果不这么写,当我们点击以及菜单的时候,所有的以及菜单都会打开
                       添加一个空白字符串的原因就是这个地方index只要字符串 -->
                  <el-submenu  :index="item.id+''" v-for="item in menulist" :key="item.id">
                    <!-- 一级菜单的模板区域 -->
                    <template slot="title">     
                      <!-- 图标 -->
                      <i class="el-icon-location"></i>
                      <!-- 一级导航名称 -->
                      <span>{{item.authName}}</span>
                    </template>

                    <!-- 二级菜单 -->
                    <el-menu-item :index="subItem.id+''" v-for="subItem in item.children" :key="subItem.id">
                      <template slot="title">     
                      <!-- 图标 -->
                      <i class="el-icon-location"></i>
                      <!-- 一级导航名称 -->
                      <span>{{subItem.authName}}</span>
                    </template>
                    </el-menu-item>

                  </el-submenu>
                </el-menu>

6.1优化一级菜单

  <!--background-color="#333744" 导航栏背景颜色
 text-color="#fff"  一级菜单字体的颜色
 active-text-color="#ffd04b" 点击二级菜单之后显示的字体颜色-->
<el-menu background-color="#333744" text-color="#fff" active-text-color="#409BFF">
                 
                  <!-- 一级菜单 -->
                  <!-- :index="item.id" 如果不这么写,当我们点击以及菜单的时候,所有的以及菜单都会打开
                       添加一个空白字符串的原因就是这个地方index只要字符串 -->
                  <el-submenu  :index="item.id+''" v-for="item in menulist" :key="item.id">
                    <!-- 一级菜单的模板区域 -->
                    <template slot="title">     
                      <!-- 图标 -->
                      <i :class="iconsObj[item.id]"></i>
                      <!-- 一级导航名称 -->
                      <span>{{item.authName}}</span>
                    </template>
    // 一级菜单栏的图标
    iconsObj:{
      '125':'iconfont icon-user',
      '103':'iconfont icon-tijikongjian',
      '101':'iconfont icon-shangpin',
      '102':'iconfont icon-danju',
      '145':'iconfont icon-baobiao',
    }

 让图片离右侧的文字稍微远一点

  .iconfont{
    margin-right:10px;
  }

6.2当打开一个一级菜单后其他一级菜单关闭

在ELement-UI文档中我们发现有这么一个unique-opened,是否只保持一个子菜单展开

 unique-opened也可以写成 :unique-opened="true"

6.3实现左侧菜单的折叠与展开功能

翻看文档,发现有一个参数是collapse,可以完成我们的需求

记得是在<el-menu>标签上添加 :collapse="true"

但是为了完成我们的需求,我们不能单单的写成上面那个样子,我们可以写成一个函,如下面所示:

    // 默认是不折叠的
    isCollapse:false
        // 点击按钮,切换菜单的折叠与展开
        toggleCollapse(){
          this.isCollapse = !this.isCollapse
        }

 效果图:

但是此时的效果并不是那么的完美,下图是我在一瞬家抓拍的,这个动画效果很不及时,我们下面就把这个动画效果给取消

我们又了解到下面的属性

然后现在我们发现 其中卡顿的动画效果消失了,但是当我们折叠起来后,我们的el-aside侧边栏是固定的,导致左边栏并没有折叠起来,这怎么办呢?

很简单,改变最上面文本的样式,当折叠之后,动态获取宽度就好了

 我们将侧边栏的宽度进行修改,不再是固定的,宽度以我们下面的图标宽度为基准

             <!-- 侧边栏区域 -->
             <el-aside :width="isCollapse ?'64px':'200px'" >

最终实现效果

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/405214.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

前端练手项目合集40.0个,附源码,2022年最新

今天分享40个博主平时收集整理的前端练手项目&#xff0c;都是一些适合前端新手的小项目合集。 1、【网易云音乐首页制作】 2、【实战项目之今日头条】 3、【实战项目之拉勾网】 4、【ReactNative项目之美食APP】 5、【uni-APP项目实战教程】 6、【React项目管理后台系统】 7、…

uni-app 怎么实现路由拦截

前言 随着业务的需求&#xff0c;项目需要支持H5、各类小程序以及IOS和Android&#xff0c;这就需要涉及到跨端技术&#xff0c;不然每一端都开发一套&#xff0c;人力成本和维护成本太高了。团队的技术栈主要以Vue为主&#xff0c;最终的选型是以uni-appuview2.0作为跨端技术…

vue中实现路由跳转的三种方式(超详细整理)

vue中实现路由跳转的三种方式 一、使用vue-router vue-router 本质是一个第三方的包 用的时候需要下载 步骤 &#xff08;7步法 &#xff09;&#xff1a; 下载vue-router模块到当前工程 yarn add vue-router在main.js中引入VueRouter函数 // 引入路由 import VueRouter from…

【TypeScript】TS 看这一篇就够了

文章目录&#x1f9d1;‍&#x1f4bb;TypeScript基本概念TypeScript 是什么&#xff1f;为什么要有typescript安装编译 TS 的工具包编译并运行 TS 代码创建基于TS的vue项目&#x1f9d1;‍&#x1f4bb;TypeScript基础类型注解TypeScript类型概述TypeScript原始数据类型数组类…

Vue实现登录功能全套详解(含封装axios)

目录 Vue项目中实现登录大致思路&#xff1a; 用到的关键文件 一、安装插件 二、创建store 三、封装axios qs vue 插件 api.js的作用 四、路由拦截 五、登录页面实际使用 Vue项目中实现登录大致思路&#xff1a; 1、第一次登录的时候&#xff0c;前端调后端的登陆接…

vite入门/徒手搭建vite/配置vite/使用vite脚手架/vite步骤

以下内容全部以图片形式展示&#xff08;自己动手尝试一下印象岂不是更深&#xff1f;&#xff09; 当然啦&#xff0c;也有完整的&#xff0c;自己拉代码https://github.com/ispaomoya/build-vite.git 文章有点长&#xff0c;你忍一下 目录 一、了解一下webpack和vite 二、…

node.js安装及环境配置超详细教程【Windows系统安装包方式】

文章目录Step1&#xff1a;下载安装包Step2&#xff1a;安装程序Step3&#xff1a;查看Step4&#xff1a;环境配置最后补充&#xff1a;Step1&#xff1a;下载安装包 https://nodejs.org/zh-cn/download/ 根据自己电脑系统及位数选择&#xff0c;我的电脑是Windows系统、64位…

微信小程序登录方法,授权登陆及获取微信用户手机号

✅作者简介&#xff1a; 大家好五一快乐&#xff0c;我是痴心阿文&#xff0c;你们的学友哥&#xff0c;今天给大家分享微信小程序登录方法&#xff01; &#x1f4c3;个人主页&#xff1a;痴心阿文的博客_CSDN博客-TypeScript.js,笔记,CSS领域博主 &#x1f525;本文前言&…

微信小程序获取当前的位置

微信小程序获取位置信息的方式有两种&#xff0c;一种是调用微信官方的接口来获取&#xff0c;如getLocation,这种方式只能获取经纬度 微信官方文档 https://developers.weixin.qq.com/miniprogram/dev/api/location/wx.getLocation.html 另一种是使用的第三方平台的&#xff0…

Web前端 | HTML引入CSS样式的三种方式

✅作者简介&#xff1a;一位材料转码农的选手&#xff0c;希望一起努力&#xff0c;一起进步&#xff01; &#x1f4c3;个人主页&#xff1a;每天都要敲代码的个人主页 &#x1f525;系列专栏&#xff1a;Web前端 目录 一&#xff1a;CSS 1. CSS概述 2. HTML引入CSS样式的…

Vue2.0搭建脚手架(vue-cli)

目录 前言 一、npm安装 二、搭建脚手架 1.安装脚手架vue-cli 2.搭建项目 前言 vue大概内容&#xff1a; Vue是一套用于构建用户界面的渐进式框架。与其它大型框架不同的是&#xff0c;Vue 被设计为可以自底向上逐层应用。Vue 的核心库只关注视图层&#xff0c;不仅易于上…

前端+后端项目 - 论坛信息管理系统(Web+servlet+MySQL+JDBC)

&#x1f91e;目录&#x1f91e; &#x1f496;一. 准备工作 &#x1f48e;1) 创建 web 项目 &#x1f48e;2) 创建目录结构 &#x1f48e;3) 配置 pom.xml &#x1f496;二. 数据库操作代码 &#x1f48e;1. 数据库设计 1.1 ER图 1.2 ER图转化为关系模型并优化 1.3 创…

(全网最详细!!)npm:无法将“npm”项识别为 cmdlet、函数、脚本文件或可运行程序的名称

文章目录问题概述一、分析原因二、解决办法1.安装node.js&#xff08;1&#xff09;下载并安装&#xff08;2&#xff09;配置环境&#xff08;3&#xff09;打开CMD&#xff0c;检查是否正常path路径是否正常。&#xff08;4&#xff09;安装完成后测试下nodejs和npm是否安装成…

前端js调用后端API获取数据的三种方法(2022.7.25)

前端js调用后台API获取数据的三种方法&#xff08;2022.7.25&#xff09;前言需求分析一个Get实例浏览器请求SoapUI软件请求一个Post实例浏览器请求SoapUI软件请求1、Http简介&#xff08;Browser / Server&#xff09;1.1 六个主流的浏览器1.2 HTTP请求&#xff08;Get & …

java后端+前端使用WebSocket实现消息推送

java后端前端使用WebSocket实现消息推送&#xff08;流程详细代码&#xff09;创建WebSocket的简单实例操作流程1.引入Websocket依赖2.创建配置类WebSocketConfig3.创建WebSocketServer4.websocket调用前端WebSocket连接OK,下课&#xff01;&#xff01;&#xff01;在项目的开…

【uploader】表格化自整理vue-simple-uploader的文档(超详细)

文章目录1.vue-simple-uploader介绍2.安装和配置3. 组件标签的文档整理3.1 uploader标签3.2 uploader-btn标签3.3 uploader-drop标签3.4 uploader-list标签3.5 uploader-file标签3.6 uploader-unsopport标签4.请求中的参数轮子的github链接&#xff1a;两个项目的文档要结合着看…

HTML可用于情侣表白的爱心代码~,赶紧跟着操作,让她也拥有属于你的爱心吧。

文章目录前言一、效果图二、操作步骤第一步第二步第三步第四步第五步第六步源码前言 最近随着电视剧《点燃我温暖你》的火热播出&#xff0c;剧中帅气学霸李洵的炫酷爱心代码也迅速火出了圈&#xff0c;爱心素材也异常火爆&#xff0c;我在这里整理了一份大家有需自取哦~ 可用于…

【React Router 6 快速上手一】重定向Navigate / useRoutes路由表 / 嵌套路由Outlet

前言 博主主页&#x1f449;&#x1f3fb;蜡笔雏田学代码 专栏链接&#x1f449;&#x1f3fb;React专栏 之前学习了react-router-dom5版本的相关内容 参考文章&#x1f449;&#x1f3fb;React路由&#xff08;详解版&#xff09;和 路由的模糊匹配&#xff0c;重定向以及嵌套…

vue安装及环境配置

目录 1.安装 Node.js 2.配置默认安装目录和缓存日志目录 3.配置环境变量 4.配置淘宝镜像 5.安装vue和脚手架 6.创建并运行项目 1.安装 Node.js Download | Node.js 在这里&#x1f446;下载的是最新版&#xff0c;如果要安装以前的版本&#x1f447;&#xff0c;页面往下…

3分钟让你学会axios在vue项目中的基本用法(建议收藏)

Axios酸狗来教你 提示&#xff1a;本篇详解axios在vue项目中的实例。在使用Vue.js框架开发前端项目时&#xff0c;会经常发送ajax请求服务端接口&#xff0c;在开发过程中&#xff0c;需要对axios进一步封装&#xff0c;方便在项目中的使用。 文章目录Axios酸狗来教你Axios简介…