本组件是基于
Vue2的自定义tree组件,参考了weibangtuo的实现,实现了以下功能:
- 节点单击钩子函数与选中效果
- 树节点默认的增删改
使用
代码
1.基础使用:给s-tree组件传递tree-data即可,treeData中单个节点的数据结构:
| 1 | { | 
本例所使用的json数据
2.节点单击事件:监听node-click,此方法接受了node参数(点击的节点对象)
3.节点后的按钮事件: buttons下click的值可以是自定义方法,也可以默认方法,默认有addNode、delNode、editNode字符串
| 1 | <template> | 
效果图

组件原理
下面是一部分需要注意的地方讲解,其他的请查看底部的源代码链接
使用递归组件
因为不确定树有多少层,所以必须得使用递归组件,递归组件最重要的是什么时候跳出递归,本例使用了如下条件:
tree.vue
| 1 | <template> | 
node-click事件实现
由于组件是递归的,无法直接$emit事件给外部钩子函数,所以循环获取到了最外层的s-treevue实例,通过此实例$emit事件暴漏给外部钩子函数
tree-item.vue:
| 1 | export default { | 
单击节点选中效果实现
s-tree-item如果是单个循环的组件,不是递归的,那么直接在外层的s-tree创建变量储存选中的值,在s-tree-item内部与该值判断来实现选中效果就可以了,但是递归组件中s-tree也可能生成了多个,所以这个值不能储存在s-tree里,只能储存在一个单例里,这儿我使用了事件中心,代码如下:
tree-item.vue:
| 1 | <template> | 
bus.vue:
| 1 | <script> | 
对了,这儿使用vuex也是可以的。


