vue结合Element UI如何实现点击左侧菜单的折叠与展开
一、Element UI 中菜单的折叠与展开
- 在
Element UI
中的官方文档中,在NavMenu
导航菜单中,在Menu Attribute
中,有一个collapse
属性。它的作用是是否水平折叠收起菜单(仅在mode
为vertical
时可用),是一个Boolean
类型,默认值为false
,我们可以根据这个collapse
属性,通过设置它的true
或者false
的值控制菜单的折叠与展开。 - 在导航菜单头部,可以设置一个按钮,通过点击控制左侧菜单的显示与隐藏,代码如下:
<div class="toggle-button" @click="toggleCollapse">|||</div>
- 在
data
中定义一个数据isCollapse
,是一个变量,控制它的值实现切换,默认为false
,代码如下:
isCollapse: false,
- 在
el-menu
中,可以动态绑定collapse
的值,代码如下
:collapse="isCollapse"
- 在
method
中,定义一个之前按钮绑定点击事件的方法,toggleCollapse
,在这个方法当中,控制isCollapse
的值,进行取反操作,这样就实现了菜单的折叠与展开,代码如下:
// 点击按钮,切换菜单的折叠与展开toggleCollapse () {this.isCollapse = !this.isCollapse}
- 菜单的折叠与展开
Element
中默认是有动画的,不方便显示,我们可以选择关闭,在Menu Attribute
中,有一个collapse-transition
属性。它的作用是是否开启折叠动画,是一个boolean
类型,默认值为true
,我们把它设置为false
,就可以关闭折叠动画了,代码如下:
:collapse-transition="false"
- 在左侧菜单的展开与折叠中,会发现一个问题,文本和图标折叠了,但是菜单的长度并没有折叠,发现原因是菜单的长度给了一个固定的值,而实际上我们需要动态给定长度。如果菜单是展开的,长度是等于文本的长度+图标的长度。如果菜单是折叠的,长度是等于图标的长度。我们可以根据
isCollapse
的值进行判断,通过它的值为true
或者是false
,来给定不同的长度,代码如下:
<el-aside :width="isCollapse?'64px':'200px'">
二、菜单的折叠与展开实现
- 主目录菜单的完整代码:
<template><el-container class="home-container"><!-- 头部区域 --><el-header><el-button type="info" @click="logout">退出</el-button></el-header><!-- 内容主题区域 --><el-container><!-- 侧边栏 --><el-aside :width="isCollapse?'64px':'200px'"><div class="toggle-button" @click="toggleCollapse">|||</div><!-- 侧边栏菜单区域 --><el-menubackground-color="#333744"text-color="#fff"active-text-color="#409EFF"unique-opened:collapse="isCollapse":collapse-transition="false":router="true":default-active="activePath"><!-- 一级菜单 --><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><!-- 二级菜单 --><el-menu-item :index="'/'+subItem.path" v-for="subItem in item.children" :key="subItem.id" @click="saveNavState('/'+subItem.path)"><template slot="title"><!-- 图标 --><i class="el-icon-menu"></i><!-- 文本 --><span>{{ subItem.authName }}</span></template></el-menu-item></el-submenu></el-menu></el-aside><!-- 右侧内容 --><el-main><router-view></router-view></el-main></el-container></el-container>
</template><script>
export default {data () {return {menuList: [],iconsObj: {'125': 'iconfont icon-yonghu1','103': 'iconfont icon-quanxian','101': 'iconfont icon-shangpin','102': 'iconfont icon-dingdan2','145': 'iconfont icon-icon_huabanfuben'},isCollapse: false,// 被激活的链接地址activePath: ''}},created () {this.getMenuList()this.activePath = window.sessionStorage.getItem('activePath')},methods: {// 退出功能logout () {// 清空tokenwindow.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.dataconsole.log(res)},// 点击按钮,切换菜单的折叠与展开toggleCollapse () {this.isCollapse = !this.isCollapse},// 保存链接的激活状态saveNavState (activePath) {window.sessionStorage.setItem('activePath', activePath)this.activePath = activePath}}
}
</script><style lang="less" scoped>
.home-container {height: 100%;
}
.el-header {background-color: #373d41;display: flex;justify-content: space-between;padding-left: 0;align-items: center;color: #fff;font-size: 20px;> div {display: flex;align-items: center;span {margin-left: 15px;}}
}.el-aside {background-color: #333744;.el-menu {border-right: none;}
}.el-main {background-color: #eaedf1;
}.iconfont {margin-right: 10px;
}.toggle-button {background-color: #4a5064;font-size: 10px;line-height: 24px;color: #fff;text-align: center;letter-spacing: 0.2em;cursor: pointer;
}
</style>
- 菜单的展开与折叠的效果实现:
- 菜单的展开效果:
- 菜单的折叠效果:
vue结合Element UI如何实现点击左侧菜单的折叠与展开相关推荐
- Vue+JS+Element UI实战(电商项目1)
目录 1.电商业务概述 2.电商后台管理系统的功能 3.项目初始化步骤 4.后台项目的环境安装配置 4.1. API V1 接口说明 4.2. 支持的请求方法 4.3. 通用返回状态说明 5.测试后 ...
- 【Vue】 element ui 引入第三方图标
最近一个项目用到 vue 和 element ui开发前端.使用element ui自带的icon太少,所以引入第三方的.截止目前为止国内外网络上的相关教程我搜索到没超过5篇,而且都不详细,即使全部阅 ...
- 关于vue.js element ui 表单验证 this.$refs[formName].validate()的问题
方法使用前需了解: 来自"和"小编的小提示: 首先打印一下this.$refs[formName],检查是否拿到了正确的需要验证的form. 其次在拿到了正确的form后,检查 ...
- Node mysql mvc vue_net MVC +Vue.js+Element UI 笔记
最近项目需求,要在MVC里用Vue 与 Element UI,故而做个笔记来记录一些遇到的问题和处理思路 (方式比较麻瓜,如果不是临时用的话,建议还是学一下Vue-cli,新项目还是老老实实前后端分离 ...
- element ui 中 el-checkbox-group 点击一个全部选中的问题
element ui 中 el-checkbox-group 点击一个全部选中的问题 原因是:checkbox-group中的v-modle要单独一个数组对象,不能作为表单对象,ruleForm中的一 ...
- Vue安装element ui踩坑
在vue安装element ui 的过程中报了许多错误,慢慢踩坑,希望能帮到各位 1. 输入 vue add element 输入 y y zh-CN 如果报错 ERROR comman ...
- Element UI样式修改之NavMenu导航菜单
目录 Element UI样式修改之NavMenu导航菜单 一.成果展示 二.步骤 三.完整代码 Element UI样式修改之NavMenu导航菜单 一.成果展示 Element UI官网给出的例子 ...
- ajax实现简单的点击左侧菜单,右侧加载不同网页
实现:ajax实现点击左侧菜单,右侧加载不同网页(在整个页面无刷新的情况下实现右侧局部刷新,用到ajax注意需要在服务器环境下运行,从HBuilder自带的服务器中打开浏览效果即可) 图片.png 原 ...
- vue开源Element UI表单设计及代码生成器
1 可视化设计器 设计器基于Element UI ,可通过点击或拖拽的方式设计基本表单, 设计器生成的代码可直接运行在基于 Element 的 vue 项目中. github仓库 https:// ...
最新文章
- centos6.6 Kickstart无人值守安装(一):原理篇
- 一个恶心的无法同步服务器与pda时间的龌龊问题
- 从脸部识别到火星机器人,正在改变世界的计算机视觉
- 正则表达式中的字符类
- 阿里云媒体转码MTS使用教程
- 挖掘经典:几乎被人遗忘的HTML七种用法 (转)
- 华硕服务器主板型号命名规则,常见主板命名规则
- 数据库查询字段为空时,返回0
- 详解CNN五大经典模型:Lenet,Alexnet,Googlenet,VGG,DRL
- 如何查看系统启动时间-
- matlab用矩形法求函数定积分,C语言使用矩形法求定积分的通用函数
- 王建国——2020年最受人民喜爱的艺术家
- 微信公众号与小程序对接文档
- 推荐六本前端开发必看的书籍
- 证伪主义 | A Little Sight of Falsification
- SQL server 常见面试题
- 国际标准SHARE78七级灾难备份方案
- 小程序选择手机图片后 压缩图片 转码base64
- 火爆全网送给女朋友的微信每日多次消息推送程序来了!多版本多平台!
- 006.Sql条件查询
热门文章
- avr单片机led数码管六位动态显示时分秒c语言程序,AVR单片机8位数码管显示的程序实现(两种方法介绍)...
- 应用计算机软件指南,2017计算机二级Access软件应用指南
- -bash:exprot:command not found的问题处理
- 动态跟踪手的状态模拟飞行游戏
- 什么是闭路电视系统,如何提高闭路电视系统的性能
- Esxi6.7直通板载USB控制器给Linux虚拟机并使用USB无线网卡(CF-812AC)上网
- Ardupilot添加一个新模式全攻略,以Copter为例
- 第一次使用spen可能遇到的问题
- 2021双十一订单翻倍也不怕,看百度智能云强大OCR赋能快递物流
- 加在形参上,spring的@NonNull和lombok的@NonNull的区别