vue+ Ant Design Vue实现拖拽树形图

之前一直是用elelement-ui实现树形图,现在需求需要修改为antd UI组件实现,在开发过程中出来了好几个坑,记录一下。
首先看一下要实现的效果:
1、可拖拽;
2、点击节点高亮,且点击请求当前节点对应的数据;
3、默认树形图的第一个节点高亮,且请求第一个节点的数据;
4、每个节点右侧需要一个添加的icon用来添加同级/子级节点;
在这里插入图片描述

1、可拖拽

【坑:】需要写onDrop方法
在这里插入图片描述
根据官网上的拖拽示例开发
需要注意的点:
1、拖拽属性是draggable,但是并不是设置为true就可以拖拽了,还需要写drop方法;
2、在drop方法中,需要注意,我们的数据的替换,不能直接复制官网代码就结束了。
首先,树形图我命名的数据是treeData,官网示例是gData,注意需要修改;其次是我设置了replaceFields替换字段,我的key用的是id,因此也需要替换,这里一定要注意。
因为element-ui是只需要设置可拖动的属性即可实现拖动,但是antd这里还需要写方法,否则不生效,因此还是踩到了几个坑
在这里插入图片描述

2、点击节点高亮,且点击请求当前节点对应的数据

【坑:】@select方法会对节点进行选中和取消选中的操作(注意还有取消选中)
在这里插入图片描述
我设置了@select=“handleNodeClick”
关于节点点击之后的几个参数,antd没有element-ui直观的可以拿到node和data,需要自己在第二个参数中获取。
看一下打印出来的参数:

在这里插入图片描述
在这里插入图片描述

高亮节点使用:selected-keys=“treeSelectedKeys”
点击之后只需要将treeSelectedKeys赋值为selectedKeys即可高亮当前点击节点。

点击节点请求数据:
在点击方法之后即可请求接口,但是注意这里有一个小坑,就是如果你点击了正在选中状态的节点,当前节点会取消选中,你也就获取不到节点对应的数据了(因为取消选中了)
简而言之就是@select方法可以进行选中节点和取消选中节点的操作

解决办法如下:
在这里插入图片描述
如果选中状态再点击,selected属性的值会被变成false,此时我们只需要不要更新treeSelectedKeys,不调取接口,不做任何的反应,则不会报错,高亮也不会消失。

3、默认树形图的第一个节点高亮

这个比较简单,只需要在获取了树形图数据之后,默认将treeSelectedKeys赋值为第一个数据并调取接口即可。
在这里插入图片描述

4、每个节点右侧需要一个添加的icon

【坑:】icon的加入,icon需要在treeData中设置slots或者scopedSlots
element-ui有自己对应的API来向右侧插入数据,但是antd我使用的方式是,加入自定义的icon之后,进行css样式的调整在这里插入图片描述
在这里插入图片描述
在树形图中添加节点的方式:
在这里插入图片描述
通过slot-scope可以拿到当前节点的数据,如果sclot-scope=“node”,node则为当前节点,node中的dataRef为当前节点的数据。

  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值