# 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 的第二个参数,将需要添加的数据传入。
如果某节点不包含 loadingchildren 字段,则不会应用异步加载效果。

# 自定义节点内容

使用强大的 Render 函数可以自定义节点显示内容和交互,比如添加图标,按钮等
Render 函数的第二个参数,包含三个字段
root 树的根节点
node 当前节点
data 当前节点的数据
通过合理地使用 root nodedata 可以实现各种效果,其中,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 展开和收起子列表时触发
  • 前节点的数组
  • 当前节点展开状态(v1.0.27)
  • 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