当前位置:网站首页>实际开发中左菜单自定义图标点击切换
实际开发中左菜单自定义图标点击切换
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,图标可变性提高
边栏推荐
猜你喜欢
![Embedded system driver primary [4] - under the basis of character device driver _ concurrency control](/img/96/5224d2de152eb738703cd201fb8407.png)
Embedded system driver primary [4] - under the basis of character device driver _ concurrency control

嵌入式系统驱动初级【4】——字符设备驱动基础下_并发控制

sql server如何得到本条记录与上一条记录的差异,即变动值

Teenage Achievement Hackers Need These Skills

Swoole学习(二)

webrtc中的任务队列TaskQueue

OpenSSF 安全计划:SBOM 将驱动软件供应链安全

读者让我总结一波 redis 面试题,现在肝出来了

想好了吗?

Web Basics and Exercises for C1 Certification - My Study Notes
随机推荐
webrtc中视频采集实现分析(一) 采集及图像处理接口封装
注意!软件供应链安全挑战持续升级
大龄程序员的心理建设
JNI基本使用
The string class introduction
TensorRTx-YOLOv5工程解读(一)
npm报错Beginning October 4, 2021, all connections to the npm registry - including for package installa
OpenSSF 安全计划:SBOM 将驱动软件供应链安全
canal实现mysql数据同步
Several ways to heavy
C1认证之web基础知识及习题——我的学习笔记
TSF微服务治理实战系列(一)——治理蓝图
Cannot read properties of null (reading ‘insertBefore‘)
嵌入式系统驱动初级【3】——字符设备驱动基础中_IO模型
MediaCodec支持的类型
【JS】js给对象动态添加、设置、删除属性名和属性值
Embedded system driver primary [3] - _IO model in character device driver foundation
Unity Visual Effect Graph入门与实践
thymeleaf中onclick事件动态传递参数问题
擎朗智能全国研发创新中心落地光谷:去年曾获2亿美元融资