Skip to content

TreeSelect 树形选择

支持极致的虚拟滚动检索。

当数据量巨大或呈现清晰的树形层级结构时,使用 TreeSelect 可以在紧凑的空间内提供高效的选择方案。

基础用法

基础单选模式。默认仅允许选中叶子节点,点击父节点会自动展开或收起。

Value:

基础单选

禁用状态

可以禁用整个组件,或在数据中通过 disabled 字段禁用特定节点(如测试组)。

禁用状态

可清空

设置 clearable 属性后,鼠标悬停时会显示清空按钮。

前端组

Value: 1-1-1

可清空

多选与折叠

设置 multiple 开启多选模式。多选模式下建议配合 collapse-tags 使用以节省空间。

Value: []

多选模式

选择任意级别

启用 check-strictly 属性后,用户可以选中分级中的任何一级节点。

研发中心

Value: 1-1

任意级选择

复选框

使用 show-checkbox 属性来启用复选框,这在多选场景下能提供更清晰的视觉勾选状态。

Value: []

复选框模式

可筛选

设置 filterable 后,用户可以直接在输入框中输入关键字进行节点过滤。

搜索过滤

懒加载

设置 lazyload 函数来实现异步加载子节点数据。这对于大型组织架构非常实用。

懒加载

自定义内容

使用 #default 插槽可以完全自定义树节点在菜单中的渲染方式。

自定义插槽

虚拟滚动 (10,000+ 节点)

本组件内置自研虚拟滚动方案。为了性能最优化,虚拟滚动默认不开启。当数据量较大(建议 500 条以上)时,请设置 virtual 属性为 true

基础搜索演示

Value Count: 0

海量数据搜索

复选框模式

即便在海量数据下,复选框的级联勾选同样流畅。

Checked Count: 0

海量数据勾选

在 Nuxt 中使用

TreeSelect 组件完全兼容 Nuxt 3/4。在 Nuxt 环境下,得益于组件自动导入(Auto Import)功能,你可以直接在模板中使用而无需手动注册。

Nuxt 中使用

SSR 注意事项

  • ✅ 树形结构的首屏渲染(包含展开/收起状态)完全支持
  • ✅ 选中的 Token 标签在服务端正确展示
  • ✅ 虚拟滚动(virtual)支持 SSR 首屏基础节点渲染
  • ✅ 懒加载(lazy)初始数据支持 SSR
  • 💡 搜索过滤和异步加载通过客户端激活(Hydration)后生效

SSR 安全性

TreeSelect 使用了 Vue 3.5 的原生 useId 机制,确保了在复杂的递归树结构中,服务端和客户端生成的节点 ID、ARIA 属性保持绝对一致,消除了深层嵌套结构中常见的水合一致性报错。

API

TreeSelect Attributes

属性名说明类型默认值
model-value / v-model绑定值string | number | (string | number)[]
data展示数据TreeOption[][]
props配置选项,详见下表object
node-key每个树节点用来作为唯一标识的属性,整棵树应该是唯一的string'value'
multiple是否多选booleanfalse
clearable是否可以清空选项booleanfalse
disabled是否禁用booleanfalse
size输入框尺寸'large' | 'default' | 'small''default'
placeholder输入框占位文本string'请选择'
empty-text无数据时显示的文本string'暂无数据'
filterable是否可搜索booleanfalse
filter-node-method自定义过滤方法(value: string, data: TreeOption, node: any) => boolean
collapse-tags多选时是否折叠标签booleanfalse
collapse-tags-tooltip是否在折叠标签时显示 tooltip (仅展示数量)booleanfalse
max-collapse-tags标签折叠前的最大展示数量number1
check-strictly是否遵循父子不互相关的原则booleanfalse
show-checkbox节点前是否显示复选框booleanfalse
default-expand-all是否默认展开所有节点booleanfalse
default-expanded-keys默认展开的节点的 key 的数组TreeKey[][]
accordion是否每次只打开一个同级树节点展开booleanfalse
indent相邻级节点间的水平缩进number16
check-on-click-node是否在点击节点时选中复选框booleanfalse
expand-on-click-node是否在点击节点时展开/收起booleantrue
lazy是否懒加载子节点booleanfalse
load加载子树数据的方法Function
virtual是否开启虚拟滚动渲染booleanfalse
height下拉菜单的最大高度string | number274
item-size虚拟滚动时每一项的高度number34
teleported是否直接将下拉层挂载至 bodybooleantrue
popper-class下拉菜单的自定义类名string
status设置输入框的校验状态'success' | 'warning' | 'error' | ''

TreeSelect Props (配置选项)

属性名说明类型
label指定节点标签为节点对象的某个属性值string
value指定节点选择值为节点对象的某个属性值string
children指定子树为节点对象的某个属性值string
disabled指定节点选择框是否禁用的属性值string
isLeaf指定节点是否为叶子节点 (仅懒加载有效)string

TreeSelect Events

事件名说明回调参数
change选中值发生变化时触发(value: any) => void
visible-change下拉框出现/隐藏时触发(visible: boolean) => void
clear点击清空按钮时触发
node-click节点被点击时的回调(data: TreeOption, node: TreeNode, e: MouseEvent) => void
check-change节点复选框状态改变时的回调(data: TreeOption, checked: boolean, indeterminate: boolean) => void
check点击复选框时的回调(data: TreeOption, info: any) => void

TreeSelect Slots

插槽名说明参数
default自定义树节点的内容{ node: TreeNode, data: TreeOption }
prefix自定义输入框前缀内容
empty无匹配数据时的显示内容

主题变量

变量名说明默认值
--yh-tree-select-node-hover-bg节点悬停时的背景颜色var(--yh-fill-color-light)
--yh-tree-select-node-selected-color选中节点时的文字颜色var(--yh-color-primary)

Released under the MIT License.