当前位置:网站首页>实际开发中左菜单自定义图标点击切换
实际开发中左菜单自定义图标点击切换
2022-08-04 05:26:00 【愿为浪漫渡此劫】
实际开发中,左菜单自定义图标点击切换
前言: 该企业项目使用的是ant design for vue
需求:左菜单图标需要进行如下自定义图标的展开和收缩切换:
1、实现该需求历程一
刚开始使用的是menu组件, 代码如下
<a-menu
mode="inline"
:default-selected-keys="keyItem"
:open-keys.sync="sonOpenKeys"
@click="handleClick"
>
<a-sub-menu :key="openTit" @titleClick="titleClick">
<span slot="title" v-if="tit !== 'none'">
<a-icon :type="sonIconType" />
<span>{
{
tit }}</span>
</span>
<!-- -->
<a-sub-menu
v-for="firstMenu in haveChild"
:key="firstMenu.id + '*' + firstMenu.url + '*' + firstMenu.name"
@titleClick="titleClick"
>
<span slot="title">
<a-icon :type="firstMenu.icon" />
<span>{
{
firstMenu.name}}</span>
</span>
<!-- -->
<a-menu-item
v-for="item in firstMenu.children"
@titleClick="titleClick"
:key="item.id + '*' + item.url + '*' + item.name"
>
{
{
item.name}}
</a-menu-item>
</a-sub-menu>
<a-menu-item
v-for="firstMenu in noHaveChild"
:key="firstMenu.id + '*' + firstMenu.url + '*' + firstMenu.name"
@titleClick="titleClick"
>
{
{
firstMenu.name}}
</a-menu-item>
</a-sub-menu>
</a-menu>
注意 :使用menu组件有如下bug
- 如果左菜单层级数是知道的,且最多2-3级,虽然可以实现自定义图标的点击切换,但是当用户点击过快,会出现意想不到的bug,且排查困难
- 如果左菜单层级不知道a-sub-menu和a-menu-item不好遍历,数据处理困难
2、实现该需求历程2
这次使用的是a-tree组件,代码如下
<a-tree
class="draggable-tree"
:default-expanded-keys="expandedKeys"
draggable
:tree-data="gData"
@dragenter="onDragEnter"
@drop="onDrop"
/>
注意 : 使用tree的缺点如下
- 虽然tree不用考虑左菜单的遍历层级,组件底层会帮我们实现深度遍历,但是,tree组件自定义可切换图标需要使用递归进行数据处理(加slots属性),实现困难,且不灵活,性能不高
- 隐藏潜在交互bug
- 如果是a-tree,就只能点击图标进行收缩展开(不能点击文字),如果是a-directory-tree可以点击文字切换收缩展开,但是就不能自定义切换图标了
关于:ant design vue的menu或者tree组件 实现手风琴模式,比较麻烦
3、实现该需求历程三
这次使用的是element ui的tree组件,代码如下
<el-tree
:data="data"
:props="defaultProps"
accordion
@node-click="handleNodeClick">
</el-tree>
实现自定义图标展开收缩切换的代码如下
<style>
/* // 树形列表 */
.el-tree .el-tree-node__expand-icon.expanded {
-webkit-transform: rotate(0deg);
transform: rotate(0deg);
}
/* //有子节点 且未展开 */
.el-tree .el-icon-caret-right:before {
background: url("../assets/img/add-icon.png") no-repeat 0 3px;
content: "";
display: block;
width: 18px;
height: 18px;
font-size: 16px;
background-size: 16px;
}
/* //有子节点 且已展开 */
.el-tree .el-tree-node__expand-icon.expanded.el-icon-caret-right:before {
background: url("../assets/img/jian-icon.png") no-repeat 0 3px;
content: "";
display: block;
width: 18px;
height: 18px;
font-size: 16px;
background-size: 16px;
}
/* //没有子节点 */
.el-tree .el-tree-node__expand-icon.is-leaf::before {
background: transparent no-repeat 0 3px;
content: "";
display: block;
width: 16px;
height: 16px;
font-size: 16px;
background-size: 16px;
}
</style>
注意 : 使用element ui的tree组件优点如下:
- 既可以点击自定义图标,又可以点击节点文字,进行展开收缩切换;
- 同样不需要考虑数据层次;
- 省去代码层的遍历,提高性能;
- 自定义图标的切换使用的是css层实现
- 图标使用的是图变,不再是icon,图标可变性提高
边栏推荐
猜你喜欢
读者让我总结一波 redis 面试题,现在肝出来了
8. Custom mapping resultMap
基于C语言的学生信息管理系统_(更新版)_(附源码和安装包)_课程设计_**往事随風**的博客
程序员也应了解的Unity粒子系统
webrtc中的视频编码(一) 视频编码模块轮廓
Typora 使用保姆级教程 | 看这一篇就够了 | 历史版本已被禁用
7.15 Day21---MySQL----索引
Unity自动生成阻挡Collider的GameObject工具
4.3 基于注解的声明式事务和基于XML的声明式事务
MySQL log articles, binlog log of MySQL log, detailed explanation of binlog log
随机推荐
Tactile intelligent sharing - SSD20X realizes upgrade display progress bar
MySql数据恢复方法个人总结
php实现telnet访问端口
处理List<Map<String, String>>类型
部署LVS-DR群集【实验】
[原创]STL容器map和unordered_map性能,创建,插入,随机访问速度对比!
8大软件供应链攻击事件概述
力扣题解8/3
Unity开发类似Profile那样的数据分析工具
腾讯136道高级岗面试题:多线程+算法+Redis+JVM
CentOS7 —— yum安装mysql
TensorRTx-YOLOv5工程解读(二)
利用Jenkins实现Unity自动化构建
php将多维数据保存进json文件
解决JDBC在web工程中无法获取配置文件
4.3 Annotation-based declarative transactions and XML-based declarative transactions
【JS】js给对象动态添加、设置、删除属性名和属性值
OpenRefine开源数据清洗软件的GREL语言
PHP解决字符乱码问题(多种编码转换)
Sublime Text 3 2021.8.3 个人配置