elementui tree 支持虚拟滚动和treeLine (上)

news/2024/12/28 21:34:20/

背景:在使用elementui+vue2.x进行项目开发时,有用到el-tree组件,但是在数据很多时会卡顿

基于以上背景elementui 提供的el-tree组件无法满足需求。

期间在网上调研了很多相关的tree组件,例如:

  • vue-trees
  • zTrees
  • jsTrees

发现以上组件,要么无法支持虚拟滚动。要么是api不够完善,定制化功能不强。

最终在查阅相关资料时,发现github有一个大佬使用vue-virtual-scroller自己写了一个elementui tree的扩展组件

链接: vue-easy-tree

同时这款组件还能完美的继承elementui tree上的属性和方法,算是过渡最为平滑的组件了。

需求变更:虽然虚拟滚动实现了,但是在演示的时候领导觉得,还是加个treeLine 更好看

所谓的treeLine 就是tree展开时,侧边那一条条带有结构性质的边线。也就是:

在这里插入图片描述
但是 vue-easy-tree 是不提供类似属性的。

没办法,对比再三还是决定从vue-easy-tree的源码上进行调整,毕竟业务代码已经写了那么多了。

所以我们的解决方案就是 在vue-easy-tree 的基础上进行二次调整,后面再发布我们自己的npm包,重新引入后,就不用去动其他的代码了。

相关代码我本地已经修改,并提交了pull 请求

在这里插入图片描述
有兴趣的可以去看看,这里我是参考了 ant-design-vue 的dom。

把动态的 width=18,36,54px ,改为固定宽度为18 的多个span标签

在这里插入图片描述
最后得到的结果如下:

在这里插入图片描述
确认这个ui就是我们要的,下一步就是发布到npm了。


http://www.ppmy.cn/news/294415.html

相关文章

程序员工作中的 80/20 法则如何体现?

80/20 原则的基础概念 该原则认为, 大部分效果出自少数起因。例如, 少数人得到大部分收入, 少数研究者做出大多数创新成果,少数作者写出大部分图书,等等。 您可能听说过 80/20 原则——它在个人生产力文献中随处可见…

RocketMQ5.x版本延迟消息被重放问题调查

一、问题 由于目标计划是将集群从4.9.x逐步升级至5.x,故目前先对一些不重要的集群进行升级测试。 但是在4.x的broker陆续升级至5.x的过程中,发现了延迟消息被重放的问题。 具体如下: 在升级时刷新后台监控,发现竟然有写入量: 即…

spring configuration 配置 aop

-- 基于表达式方式 AspectJExpressionPointcut cut new AspectJExpressionPointcut();cut.setExpression("* com.xx.service..*.*(..))");Advisor advisor new DefaultPointcutAdvisor(cut,实现MethodInterceptor接口);-- 注解形式DefaultPointcutAdvisor adviso…

js 根据字符串类型的数字排序

var arr [{AddRess: "广州南站", lng: 113.275824, lat: 22.994826, Mileage: "558"},{AddRess: "长沙南站", lng: 113.071579, lat: 28.15323, Mileage: "883"},{AddRess: "上海虹桥站", lng: 121.327012, lat: 31.200458…

vue-router4.x报错 api.now is not a function 的解决方法

控制台抛出错误&#xff0c;并且无法切换路由&#xff0c;如下&#xff1a; Uncaught (in promise) TypeError: api.now is not a function ? ? at vue-router.esm-bundler.js:2489:31 ? ? at vue-router.esm-bundler.js:3296:37 ? ? at Array.forEach (<anonymous&g…

【运行vue项目vue-router报错】Uncaught TypeError: Object(...) is not a function

报错 vue2脚手架运行npm run dev&#xff0c;失败&#xff0c;报这样的错 vue-router.esm-bundler.js?6c02:2127 Uncaught TypeError: Object(...) is not a functionat eval (vue-router.esm-bundler.js?6c02:2127:1)at Module../node_modules/vue-router/dist/vue-router.…

4229: 选择

4229: 选择 Time Limit: 10 Sec Memory Limit: 128 MB Submit: 59 Solved: 36 [ Submit][ Status][ Discuss] Description 现在&#xff0c;我想知道自己是否还有选择。 给定n个点m条边的无向图以及顺序发生的q个事件。 每个事件都属于下面两种之一&#xff1a; 1、删除某一…

hdu2489

这题用到 枚举prim 拍了半天队&#xff0c;已经没报希望了&#xff0c;wa了好多次&#xff0c;结果竟然ac&#xff0c;看自己做没错&#xff0c;一些细节没处理好。 总的来讲像这种数据小的题目用枚举完全无压力&#xff0c;放心用。 这里注意一下对于非重排列&#xff0c;就…