因为项目中使用比较多树形组件的原因,尝试使用过iview以及element-ui的树组件,两个组件库都非常优秀,但是在用它们的树组件来实现需求时都不甚满意。主要体现在样式的难于控制、以及操作的便捷性上。在阅读element-ui的代码后,结合自己的需求自己写了一个树组件,代码在github上开源,并且发布到了npm上(目前已发布了1.0稳定版本,将会持续维护)。你可以通过npm或者yarn包管理工具安装这个组件到你的项目中使用。本文会叙述这个组件的功能、如何使用这个组件,关于组件源代码请查看github仓库(关于Vue树组件的渲染原理可以查看我前面写的文章)。
一、功能和效果
1. 功能:
- 基本操作:增加、删除、修改操作直接修改数据即可,数据控制视图。
- 节点内容自定义:你可以在一个节点中自定义你想展示的内容,比如常见的在节点中增加操作按钮。
- 节点缩进竖线:当树的同一级节点略多的时候,本组件会用不同颜色的竖线来告诉你哪些节点为同一层级,并且这些竖线的颜色你可以自由控制而不一定非得使用默认颜色。
- 缩进控制:如果你在项目中使用过其它的树组件,比如iview或者element-ui的树组件(iview和element-ui是两个非常优秀而全面的前端组件库),就会发现当树的层数增多时,树的宽度固定,这时最深层的节点已经缩进到视窗的最右边,你不得不设置overflow属性来拖动查看完整的节点数据。在本组件中,你不必为这个问题烦恼了,你可以控制每一层缩进的最大距离maxIndent和所有层的最大缩进距离indentLimit,这意味着,如果你设置indentLimit为40,那最深层的缩进距离就是40% x _树宽度_,而每一层的缩进距离都会根据最大缩进距离和层数动态计算。
- 拖动操作:如果你使用过element-ui的树组件,你会发现拖动操作非常难受,拖动的提示仅是一条细线,拖动为子节点和拖为下一节点的区别不明显,而最难受的是拖为子节点和拖为下一节点的操作你得小心翼翼控制鼠标的上下位置,才能拖动到你想要的位置。在本组件中,拖动到相对哪个节点的哪个相对位置你会得到清晰的反馈,并且操作过程会更加舒服。
2. 先来看看效果(本例的效果即为github仓库中的例子,你可以安装该项目体验):
二、