# Tree 树形控件
# Tree 概述
文件夹、组织架构、生物分类、国家地区等等,世间万物的大多数结构都是树形结构。使用树控件可以完整展现其中的层级关系,并具有展开收起选择等交互功能。
# Tree 代码演示
# 基础用法
最简单的用法,展示可勾选,可选中,禁用,默认展开等功能。
# 是否支持多选
multiple 是否支持多选
getCheckedNodes 获取被勾选的节点
getSelectedNodes 获取被选中的节点
# 是否显示多选框
show-checkbox 是否显示多选框
# 父子节点是否不联动
checkStrictly 父子节点不联动(只在显示多选框模式下使用),不设置时默认联动
# 绑定事件
on-select-change 点击树节点时触发,返回当前已选中的节点数组
on-check-change 点击复选框时触发,返回当前已勾选节点的数组
on-toggle-expand 展开和收起子列表时触发,返回当前节点的数组
# 异步加载子节点
load-data 属性可以异步加载子节点,需要给数据增加 loading 来标识当前是否在加载中。
load-data 第一个参数为当前节点信息;执行 load-data 的第二个参数,将需要添加的数据传入。
如果某节点不包含 loading 和 children 字段,则不会应用异步加载效果。
# 自定义节点内容
使用强大的 Render 函数可以自定义节点显示内容和交互,比如添加图标,按钮等
Render 函数的第二个参数,包含三个字段
root 树的根节点
node 当前节点
data 当前节点的数据
通过合理地使用 root node 和 data 可以实现各种效果,其中,HUI 给每个节点都设置了一个 nodeKey 字段,用来标识节点的 id。
Render 函数分两种,一种是给当前树的每个节点都设置同样的渲染内容,此 render 通过 Tree 组件的属性 render 传递;另一种是单独给某个节点设置,在该节点的 render 字段内设置;同时设置时,会优先使用当前节点的 Render 函数。
# 自动异步加载子节点
autoLoad 属性可以在组件初始化时自动异步加载子节点,需要给该节点上设置loading属性及load-data方法。
设置该节点leaf属性为true,则当前节点为叶子节点(忽略loading,children属性)
# 子节点分页
节点上设置 hasPage 属性为 true,同时设置 loading 及 load-data 方法,则可对其子节点进行分页
设置 currentPageInfo 传入当前节点分页信息:page 为当前页码,nodeKey 为当前节点 key
对于已经加载完数据的节点,展开时不重新加载,因此需要通过 on-select-change 来切换分页节点
同时添加 h-page 分页组件即可实现分页
# 树节点筛选显示
使用 filter-node-method 指定筛选用 的函数;调用 filter() 后将对每一个树节点执行 filter-node-method 传入的函数。当返回值为 true 时,代表通过筛选
# 展开/收缩树节点
通过 this.$refs.xxx.expand(status) 来对 tree 进行收缩和展开,传入 true 时展开,传入 false 时收缩
# Tree API
# Tree props
| 属性 | 说明 | 类型 | 默认值 |
|---|---|---|---|
| data | 可嵌套的节点属性的数组,生成 tree 的数据 | Array | [] |
| multiple | 是否支持多选(只支持树节点多选,与多选框无关) | Boolean | false |
| show-checkbox | 是否显示多选框(显示多选框) | Boolean | false |
| checkStrictly | 父子节点不联动(只在显示多选框模式下使用) | Boolean | false |
| showIndeterminate | 多选框是否不显示不确定性状态(只在多选框存在并且父子组件联动的情况下使用) | Boolean | false |
| load-data | 异步加载数据的方法,见示例 | Function | - |
| render | 自定义渲染内容,见示例 | Function | - |
| currentPageInfo | 当前分页信息,必须包含 page (当前页码)及 nodeKey (当前节点key) | Object | - |
| isAlwaysSelect | 重复点击某节点,是否总是选中当前节点,render 情况不可用,建议单选使用(此属性仅在v1.0.14或以上版本有效) | Boolean | false |
| isBoxRight | 将多选框显示在最右侧(此属性仅在v1.0.18或以上版本有效) | Boolean | false |
| selectToCheck | 支持点击文字选中勾选框,及点击文字和点击勾选框是一样的效果(此属性仅在v1.0.18或以上版本有效) | Boolean | false |
| notDeepCopy | 组件 data 属性传入组件中变量是否随组件内部修改而修改(此属性仅在v1.0.29或以上版本有效) | Boolean | false |
| onlyUpdateDown | 父子组件级联时只向下级联,不向上级联(v1.0.36) | Boolean | false |
| filter-node-method | 对树节点进行筛选时执行的方法,返回 true 表示这个节点可以显示,返回 false 则表示这个节点会被隐藏。详情参考示例 其中参数 val 为 filter 函数传入的参数,data 为树的所有数据,node 为当前节点数据 (v1.0.51) | Function(val,data,node) | function(){return true} |
| titleMaxWidth | 设定每个节点的 title 文字最大宽度,当文本超出显示省略号,鼠标悬浮显示全部文本 (v1.0.83) | String|Number | - |
# Tree events
| 事件名 | 说明 | 返回值 |
|---|---|---|
| on-select-change | 点击树节点时触发 | 返回两个参数,当前已选中的节点数组,当前操作的节点对象(v1.0.37) |
| on-check-change | 点击复选框时触发 | 返回两个参数,当前已勾选节点的数组,当前操作的节点对象(v1.0.37) |
| on-toggle-expand | 展开和收起子列表时触发 | |
| on-mouseover | 鼠标移到当前节点 title 上触发(v1.0.27) | 当前节点对象 |
| on-right-click | 鼠标右击当前节点 title 上触发(v1.0.50) | |
| on-double-click | 鼠标双击当前节点 title 上触发(v1.0.65) | 当前节点对象 |
# Tree methods
| 方法名 | 说明 | 参数 |
|---|---|---|
| getCheckedNodes | 获取被勾选的节点,该方法在[1.0.17及其以上版本]支持内置参数 indeterminate[true或者false, 默认false] 来支持是否返回联动选中节点,即 indeterminate 为 true 节点 | 无 |
| getSelectedNodes | 获取被选中的节点 | 无 |
| nodeSelect(key,value,status)(此方法只在v1.0.15版本及以上有效) | key 为当前数据中每一项皆有的属性名,其属性值为唯一值不重复,value 为属性值,status 为选中状态默认为true | 无 |
| filterHighlight(val) | 根据 val 关键字,高亮搜索出来的节点(v1.0.32) | 无 |
| nodeCheck(key,value,status)(此方法只在v1.0.44版本及以上有效) | key 为当前数据中每一项皆有的属性名,其属性值为唯一值不重复,value 为属性值,status 为勾选状态默认为true | 无 |
| filter(val, childShow) | 用于筛选过滤树,配合使用 filter-node-method 传入的方法,对表格的每一项进行过滤。(v1.0.51) | val 表示过滤参数,将在 filter-node-method 传入的函数中作为第一个参数 childShow 参数,为 true 表示将匹配到节点的子节点全部返回(v1.0.62),默认 false |
| expandTree(status) | 内部提供的方法用于展开或者收缩树组件,传入一个参数 status,status 为 true 时展开树组件,status 为 false 时收缩树组件。 调用方式为 this.refs.xxx.expandTree(status) | status,为必填项,传入 true 时为展开,传入 false 时为收缩 |
# Tree children
| 属性 | 说明 | 类型 | 默认值 |
|---|---|---|---|
| title | 标题 | String | - |
| expand | 是否展开直子节点 | Boolean | false |
| disabled | 禁掉响应(包括多选框和树节点;v1.0.46以上不禁用收缩展开) | Boolean | false |
| disableCheckbox | 禁掉 checkbox (只包括多选框不包括树节点) | Boolean | false |
| selected | 是否选中树节点 | Boolean | false |
| checked | 是否勾选(如果勾选且在父子树节点联动且当前节点为父树节点的情况下,子节点也会全部勾选) | Boolean | false |
| loading | 异步加载子节点数据(为 true 表示正在加载子节点数据,需设置 load-data) | Boolean | false |
| children | 子节点属性数组 | Array | - |
| leaf | 叶子节点属性,设置leaf后该节点为叶子节点(children,loading无效)(此属性只在1.0.10或以上版本有效) | Boolean | false |
| autoLoad | 需设置 loading 及 load-data 异步加载方法后设置 autoLoad 属性,可以在组件初始化时自动异步加载数据(此属性只在1.0.10或以上版本有效) | Boolean | false |
| hasPage | 需同时设置 loading、load-data 方法及 currentPageInfo,则可对其子节点进行分页(此属性只在1.0.10或以上版本有效) | Boolean | false |
# tree性能
不同节点个数加载时间
| # | 1000(个) | 2000(个) | 5000(个) | 10000(个) |
|---|---|---|---|---|
| 无render | 348ms | 364ms | 446ms | 588ms |
| 有render | 368ms | 423ms | 591ms | 892ms |
| 节点expanded | 1106ms | 1832ms | 4203ms | 8459ms |