Skip to content

Tree 树形控件

常用的树形展示组件,支持海量数据虚拟滚动、搜索过滤、拖拽排序等高级特性。

基础用法

Node 1
Node 2
基础用法

可选择与禁用

通过 show-checkbox 开启复选框。在数据项中设置 disabled: true 可禁用该节点(不可点击、不可选中)。

Level one 1
Level two 1-1
Level two 1-2
Level three 1-2-1
Level one 2
复选框与禁用节点

父子不相关联

设置 check-strictly=true,父子节点的选中状态将互不影响。

Level one 1
Level one 2
独立选择

手风琴模式

设置 accordion=true,每次展开一个节点时将自动收起其它同级节点。

Level one 1
Level one 2
手风琴模式

展示连接线

使用 show-line 属性清晰展示树层级关系。

Level one 1
Level two 1-1
Level two 1-2
Level three 1-2-1
Level one 2
Level two 2-1
Level two 2-2
连接线模式

复选框位置

通过 checkbox-position 将复选框置于右侧。

Level one 1
Level one 2
复选框居右

异步懒加载

Lazy Root
懒加载演示

自定义节点类名

重点关注节点
警告提示节点
自定义类名

自定义展开图标

Level one 1
Level one 2
自定义图标

自定义节点内容

Level one 1Root
Level one 2Root
自定义内容

自定义前缀与后缀

1Level one 1
2Level one 2
前缀与后缀

万级数据虚拟滚动

Virtual Node 0
Virtual Node 1
Virtual Node 2
Virtual Node 3
Virtual Node 4
Virtual Node 5
Virtual Node 6
Virtual Node 7
Virtual Node 8
Virtual Node 9
Virtual Node 10
虚拟滚动

节点过滤

Level one 1
Level one 2
树节点过滤

可拖拽节点

Level one 1
Level one 2
拖拽演示

多选与节点获取

Level one 1
Level one 2
多选获取

自定义字段映射

Root A
Root B
字段映射

综合进阶:大数据量下的过滤与选择

Virtual Node 0
Virtual Node 1
Virtual Node 2
Virtual Node 3
Virtual Node 4
Virtual Node 5
Virtual Node 6
Virtual Node 7
Virtual Node 8
Virtual Node 9
Virtual Node 10
Virtual Node 11
Virtual Node 12
Virtual Node 13
综合示例

在 Nuxt 中使用

Tree 组件完全支持 Nuxt 3/4 的 SSR 渲染。在 Nuxt 项目中使用时,组件会自动导入,无需手动注册。

Nuxt SSR Node 1
Nuxt SSR Node 2
Nuxt 中使用

SSR 注意事项

  • ✅ 数据结构完美序列化
  • ✅ 节点展开状态在 SSR 环境下正确生成
  • ✅ 虚拟滚动功能在客户端自动激活
  • ✅ 事件绑定与响应式状态无缝对接

SSR 安全性

Tree 组件内部处理了虚拟滚动和 DOM 操作,确保在服务端不触发浏览器 API,在客户端注入后平滑过渡。

API

Props

属性名说明类型默认值
data数据源TreeNodeData[][]
props配置选项,具体见下表object{ label: 'label', children: 'children', disabled: 'disabled' }
node-key每个树节点用来作为唯一标识的属性字段名string'id'
show-checkbox节点是否可被选择booleanfalse
checkbox-position复选框相对于文字的位置'left' | 'right''left'
default-expand-all是否默认展开所有节点booleanfalse
default-expanded-keys默认展开的节点 key 数组(string | number)[][]
default-checked-keys默认选中的节点 key 数组(string | number)[][]
current-node-key当前选中节点的 key,支持 v-modelstring | number-
highlight-current是否高亮当前选中节点booleantrue
accordion是否每次只打开一个同级树节点展开booleanfalse
indent相邻级节点间的水平缩进,单位为像素number18
check-strictly在显示复选框的情况下,是否严格的遵循父子不互相关联booleanfalse
expand-on-click-node是否在点击节点时展开或者收起节点booleantrue
check-on-click-node是否在点击节点的时候选中复选框booleanfalse
empty-text内容为空的时候展示的文本string'暂无数据'
filter-method对树节点进行筛选时执行的方法(query, node) => boolean-
lazy是否懒加载子节点,需与 load 方法结合使用booleanfalse
load加载子树数据的方法,仅在 lazy 属性为 true 时有效(node) => Promise-
virtual是否开启虚拟滚动booleanfalse
height虚拟滚动窗口高度 (px)number400
item-height每个节点的高度 (px)number30
show-line是否显示连接线booleanfalse
draggable是否开启拖拽功能booleanfalse

Props Data Mapping

属性名说明类型默认值
label指定节点标签为节点对象的某个属性值string'label'
children指定子树为节点对象的某个属性值string'children'
disabled指定节点选择框是否禁用的属性名string'disabled'

TreeNodeData 字段定义

属性名说明类型
key唯一标识 (必须)string | number
label显示文本 (必须)string
children子节点数组TreeNodeData[]
disabled是否禁用该节点的选择/点击boolean
isLeaf是否为叶子节点 (懒加载场景下使用)boolean
icon自定义节点图标类名string
class自定义节点样式类名string

Events

事件名说明回调参数
node-click节点被点击时的回调(node: TreeNode, e: MouseEvent)
node-expand节点被展开或收起时的回调(node: TreeNode, expanded: boolean)
check复选框状态改变时的回调(node: TreeNode, checked: boolean, checkedKeys: (string | number)[])
current-change当前选中节点发生变化时的回调(node: TreeNode | null)
node-drag-start节点开始拖拽时的回调(node: TreeNode, e: DragEvent)
node-drag-end节点拖拽结束时的回调(node: TreeNode, dropNode: TreeNode | null, pos: 'before' | 'after' | 'inner', e: DragEvent)
node-drag-over节点拖拽过程中的回调(node: TreeNode, e: DragEvent)
node-drag-enter拖拽进入节点时的回调(node: TreeNode, e: DragEvent)
node-drag-leave拖拽离开节点时的回调(node: TreeNode, e: DragEvent)
node-drop节点完成拖拽投放时的回调(node: TreeNode, dropNode: TreeNode, type: 'before' | 'after' | 'inner', e: DragEvent)

Slots

插槽名说明参数
default自定义节点内容{ node, data }
icon自定义展开图标{ node, data }
prefix自定义内容前缀{ node, data }
suffix自定义内容后缀{ node, data }
empty无数据时的内容-

node 对象包含:key, label, level, expanded, checked, indeterminate, loading, isLeaf 等属性。data 为原始数据项。

Expose

方法名/属性说明参数/类型
filter对树节点进行筛选操作(query: string)
getNode根据 key 获取节点数据(key: string | number)
getCheckedNodes返回目前被选中的节点所组成的数组-
getCheckedKeys返回目前被选中的节点的 key 所组成的数组-
getHalfCheckedNodes返回目前半选中的节点所组成的数组-
getHalfCheckedKeys返回目前半选中的节点的 key 所组成的数组-
getCurrentKey获取当前选中节点的 key-
getCurrentNode获取当前选中节点的数据-
setChecked通过 key 设置某个节点的勾选状态(key: string | number, checked: boolean, deep?: boolean)
setCheckedKeys通过 keys 设置节点选中状态(keys: (string | number)[])
setCheckedNodes通过节点数据设置选中状态(nodes: TreeNodeData[])
setCurrentKey通过 key 设置当前选中节点(key: string | number | undefined)
setExpandedKeys设置当前展开的节点(keys: (string | number)[])
setData显式设置树插件数据(data: TreeNodeData[])
expandNode展开指定节点(key: string | number)
collapseNode折叠指定节点(key: string | number)
scrollTo滚动到给定位置 (仅虚拟滚动开启时有效)(options: number | ScrollToOptions)
scrollToNode使用给定的滚动策略滚动至指定位置(key: string | number)
expandedKeys当前展开的节点 key 集合Ref<Set<string | number>>
checkedKeys当前选中的节点 key 集合Ref<Set<string | number>>

主题变量

变量名说明默认值
--yh-tree-node-height节点高度28px
--yh-tree-text-color节点文字颜色var(--yh-text-color-primary)
--yh-tree-hover-bg节点悬停背景色var(--yh-color-primary-light-9)
--yh-tree-current-bg当前选中节点背景色var(--yh-color-primary-light-8)

Released under the MIT License.