Skip to content

TreeSelect 树选择

xy-tree-select 用于树形结构的值选择——值是单个节点 key,适合组织架构、权限树、菜单配置等"需要展开/折叠但只需要节点 key"的场景。当你的值是"从根到叶的完整路径数组"时用 xy-cascader;当选项是扁平枚举时用 xy-select

实例级样式收口

  • 后台项目如果只是想收口树面板的背景、边框、阴影和宽度,优先使用 popper-classpopper-style,不要在页面层 deep 到树节点、展开/折叠指示器和选中态的内部类名。
  • TreeSelect 和 Select / Cascader 一样是筛选条/表单输入浮层;如果风格不统一,优先回到组件库层处理。

基础用法

通过 node-key 标识节点主键,组件会在选择后回显节点标签。

基础用法树形选择

树形选择器用于从树形结构中选择节点,支持级联选择。

过滤与清空

开启 filterable 后,可以在面板内搜索已加载节点,并结合 clearable 清空当前值。

实例级样式收口

当后台项目只想统一树筛选面板的背景、搜索区和节点 hover 状态时,优先通过 popper-class 和实例级变量收口,而不是继续 deep 到内部类名。

表单场景

放在 xy-form-item 中时,树选择会在选择和关闭时参与表单校验。

组件边界与场景选择

  • TreeSelect:树节点值选择,值是单个 TreeKey(节点唯一标识),适合组织架构、权限树、菜单配置。节点可展开/折叠但不需要跨级回显路径。
  • Cascader:路径选择,值是 CascaderKey[](从根到叶的完整路径数组),适合地区、目录、分类体系。触发器按路径回显。
  • Select:扁平枚举值选择,值是单个或多个 option.value,适合状态、角色等简单枚举。没有层级结构。
  • 如果你需要"从根到叶的完整路径"作为值,用 Cascader;如果只需要树中某个节点的 key,用 TreeSelect;如果选项没有层级,用 Select。

值形态

  • model-value 类型为 TreeKey | nullTreeKey = string | number
  • 当前 v1 只做单选,值是单个节点 key
  • props.labelprops.childrenprops.disabled 与 Cascader 的 CascaderFieldNames 类似,但 TreeSelect 的值是单节点 key 而非路径数组

行为约定

  • 当前版本只做单选树选,model-value 是当前节点的单个 key,不是路径数组。
  • filterable 打开后,会在面板顶部展示搜索框;默认会直接调用内部 tree.filter()
  • 如果你需要定制过滤逻辑,可以通过 filter-node-method 复用 xy-tree 的节点过滤协议。

命名映射

Vue 模板中 props 和 events 使用 kebab-case,源码 / TS 类型层使用 camelCase,两者由 Vue 自动转换,等价:

Props 映射

模板写法(kebab-case)源码 / TS 写法(camelCase)
model-valuemodelValue
node-keynodeKey
filter-node-methodfilterNodeMethod
empty-textemptyText
search-placeholdersearchPlaceholder
append-toappendTo
popper-classpopperClass
popper-stylepopperStyle

其余属性(dataplaceholderdisabledclearablefilterablelazyloadsizeteleportedplacementoffset)为单词形式,模板与源码写法一致。

Events 映射

模板写法(kebab-case)源码 emit 写法(camelCase)
update:model-valueupdate:modelValue
visible-changevisibleChange

其余事件(changeclearfocusblur)为单单词,模板与源码写法一致。

下方 API 表格统一按模板层推荐写法列出。

API

TreeSelect Attributes

属性说明类型默认值
model-value当前选中节点 keyTreeKey | nullnull
data树节点数据TreeData[]
node-key节点唯一标识字段stringundefined
props树节点字段映射TreeOptionProps{ children: 'children', label: 'label', disabled: 'disabled' }
placeholder未选择时的占位提示TreeSelectProps["placeholder"]'请选择节点'
disabled是否禁用booleanfalse
clearable是否允许清空booleanfalse
filterable是否启用搜索过滤booleanfalse
filter-node-method自定义节点过滤方法FilterNodeMethodFunctionundefined
lazy是否启用懒加载booleanfalse
load懒加载回调LoadFunctionundefined
size组件尺寸TreeSelectProps["size"]跟随全局配置
empty-text空数据文案string'暂无数据'
search-placeholder搜索框占位文案string'搜索节点'
teleported是否把下拉面板传送到 bodybooleantrue
append-to下拉面板挂载目标string | HTMLElement'body'
placement下拉面板弹出位置Placement'bottom-start'
offset下拉面板偏移量number8
popper-class下拉面板自定义类名string''
popper-style下拉面板自定义样式StyleValue''

TreeSelect Events

事件说明参数
update:model-value选中节点 key 变化时触发TreeSelectValueChangeHandler
change选中节点确认变化时触发TreeSelectValueChangeHandler
clear点击清空按钮时触发
visible-change面板打开或关闭时触发TreeSelectVisibleChangeHandler
focus打开面板时触发
blur关闭面板时触发

TreeSelect Exposes

暴露项说明类型
focus聚焦触发器TreeSelectInstance["focus"]
blur关闭面板并让触发器失焦TreeSelectInstance["blur"]
open打开下拉面板TreeSelectInstance["open"]
close关闭下拉面板TreeSelectInstance["close"]
filter主动设置过滤关键词并同步树过滤TreeSelectInstance["filter"]