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

这篇具有很好参考价值的文章主要介绍了Vue+ELementUI主页布局----侧边栏布局(el-aside)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

第一节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-aside,# Vue实战,前端,javascript,开发语言,vue.js,elementui

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

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

 el-aside,# Vue实战,前端,javascript,开发语言,vue.js,elementui

因为最外层的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>

最终完成我们需要的效果

el-aside,# Vue实战,前端,javascript,开发语言,vue.js,elementui

二、主页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-aside,# Vue实战,前端,javascript,开发语言,vue.js,elementui

三、主页左侧带单布局

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

el-aside,# Vue实战,前端,javascript,开发语言,vue.js,elementui

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

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

el-aside,# Vue实战,前端,javascript,开发语言,vue.js,elementui

el-aside,# Vue实战,前端,javascript,开发语言,vue.js,elementui

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

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

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

el-aside,# Vue实战,前端,javascript,开发语言,vue.js,elementui

el-aside,# Vue实战,前端,javascript,开发语言,vue.js,elementui

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

复习链接:

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

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

el-aside,# Vue实战,前端,javascript,开发语言,vue.js,elementui

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

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

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

el-aside,# Vue实战,前端,javascript,开发语言,vue.js,elementui

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

el-aside,# Vue实战,前端,javascript,开发语言,vue.js,elementui

 在main.js中做出添加拦截器的操作el-aside,# Vue实战,前端,javascript,开发语言,vue.js,elementui

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

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

el-aside,# Vue实战,前端,javascript,开发语言,vue.js,elementui

下图是res对象中的各种值

el-aside,# Vue实战,前端,javascript,开发语言,vue.js,elementui

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

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-aside,# Vue实战,前端,javascript,开发语言,vue.js,elementui

                <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>

el-aside,# Vue实战,前端,javascript,开发语言,vue.js,elementui

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;
  }

el-aside,# Vue实战,前端,javascript,开发语言,vue.js,elementui

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

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

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

el-aside,# Vue实战,前端,javascript,开发语言,vue.js,elementui

el-aside,# Vue实战,前端,javascript,开发语言,vue.js,elementui

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

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

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

el-aside,# Vue实战,前端,javascript,开发语言,vue.js,elementui

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

el-aside,# Vue实战,前端,javascript,开发语言,vue.js,elementui

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

 效果图:

el-aside,# Vue实战,前端,javascript,开发语言,vue.js,elementui

el-aside,# Vue实战,前端,javascript,开发语言,vue.js,elementui

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

el-aside,# Vue实战,前端,javascript,开发语言,vue.js,elementui

我们又了解到下面的属性

el-aside,# Vue实战,前端,javascript,开发语言,vue.js,elementui

el-aside,# Vue实战,前端,javascript,开发语言,vue.js,elementui

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

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

el-aside,# Vue实战,前端,javascript,开发语言,vue.js,elementui

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

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

最终实现效果

el-aside,# Vue实战,前端,javascript,开发语言,vue.js,elementui

 el-aside,# Vue实战,前端,javascript,开发语言,vue.js,elementui文章来源地址https://www.toymoban.com/news/detail-786743.html

到了这里,关于Vue+ELementUI主页布局----侧边栏布局(el-aside)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • vue3.0+element Plus实现页面布局,侧边栏菜单路由跳转

    一. 先在router.js文件中配置路由,将侧边栏中需要跳转的页面都添加到children中 二. 在view目录下新建一个文件,里面包含侧边栏要跳转的页面 三.  页面样式布局 1. 我选择使用自定义组件BaseLayout.vue文件来设置header和aside样式显示 也可以使用element plus中的Container 布局容器 

    2024年02月13日
    浏览(39)
  • vue+elementUI el-table实现单选

    2024年02月09日
    浏览(33)
  • vue+elementui实现app布局小米商城,样式美观大方,功能完整

    目录 一、项目效果在线预览 二、效果图 1.首页效果图 2.分类,动态分类+商品数据根据所属分类动态切换 3.购物车,动态添加购物车(增、删、改、查) 4.我的 5.登录注册 6.商品详情 7.搜索(动态模糊搜索、搜索历史记录) 8.提交订单-商品详情(单个商品) 9.提交订单-购物

    2024年02月15日
    浏览(75)
  • 【vue elementui中el-input输入框禁用】

      使用:disabled=\\\"true\\\"可以使el-input标签禁用

    2024年02月16日
    浏览(91)
  • Vue实战第3章:主页设计之顶部导航栏

    主页设计之顶部导航栏 前言 本篇在讲什么 本篇文章主要来制作一个导航栏,具体效果就按照下图来处理吧 本篇适合什么 适合 初学Vue 的小白 想了解 建站 的同学 本篇需要什么 对 Html 语法有简单认知 对 CSS 语法有简单认知 对 Vue 有简单认知 依赖 VS Code 编辑器 本篇的特色 具

    2024年02月02日
    浏览(26)
  • vue elementui 修改步骤条el-steps的样式

    感觉以后可能还会用到,在此记录一下 场景: elementui原有的样式: 目标样式:   实现:   html代码: 多加了个居中属性:align-center css代码:  ok啦,如果有更优的方法,再优化    

    2024年02月16日
    浏览(28)
  • Vue - 完美解决 Element UI 侧边导航菜单 <el-menu> 出现滚动条,去掉 Element 侧边导航组件的横纵滚动条(但滚动功能依然保留,仅仅是去掉 “滚动条“)100% 解决方案

    网上的教程都不好使(甚至还有的提议在全局去掉,这么做万一需要怎么办?),本文可完美 100% 解决,代码简洁高效。 本文实现了 Element UI 组件库中,去掉 NavMenu 侧边导航菜单组件出现的滚动条! 并且是 “局部” 的,也就是说只去掉本页侧边栏菜单的滚动条,不会影响全

    2024年02月11日
    浏览(40)
  • 自定义el-tree复选框选中状态vue elementUI

    :check-strictly属性:该属性默认false,表示严格遵循父子相互关联。父子相互关联(即选中父节点其所有子节点全部选中,取消选中父节点其子节点全部取消,且折叠、展开状态都一样)。 Attributes属性 参数 说明 类型 可选值 默认值 check-strictly 在显示复选框的情况下,是否严格

    2023年04月09日
    浏览(26)
  • Vue+ElementUI el-select选择器:绑定的值为对象

    业务需求: el-select选择器,后台接口需要的参数为name,name会存在重复情况,前端唯一标识选择用id,所以最后决定使用select绑定对象值将数据保存下来。 实现思路: 常规的select选择器,v-model 形式绑定的参数只能是boolean,string,number,但是仔细翻阅官方文档发现,selelct是可以

    2024年02月14日
    浏览(33)
  • 【Vue】【ElementUI】关于el-table的自适应行高设定

    网上好多设置el-table高度和行高的方法,主要是用elementui文档里这几个参数: 我直接用css设置了el-table的高度,主要是为了自适应,百分比根本不管用,所以用vh单位: 行高之前用了 cell-style ,有一个问题是它只能用px单位,设置了之后改分辨率或者换浏览器大小就不一致了,

    2024年02月15日
    浏览(54)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包