Skip to content

TreeSelect 树选择

在下拉面板中以树形结构选择,支持单选、多选(级联勾选)与搜索。

基础用法

单选模式,点击节点即选中并关闭。

值:(空)
vue
<template>
  <ExTreeSelect v-model="value" :data="treeData" clearable />
</template>

<script setup>
import { ref } from 'vue'
const value = ref(null)
const treeData = [
  { value: 'tokyo', label: 'Neo Tokyo', children: [
    { value: 'shibuya', label: '涩谷区' },
  ]},
]
</script>

多选(级联勾选)

设置 multiple 显示复选框,勾选父节点会级联选中子节点,子节点状态回溯影响父节点(半选)。

已选 0 项
vue
<template>
  <ExTreeSelect v-model="value" :data="treeData" multiple clearable default-expand-all />
</template>

<script setup>
import { ref } from 'vue'
const value = ref([])
</script>

父子不关联

设置 check-strictly,父子节点的勾选状态相互独立。

vue
<template>
  <ExTreeSelect v-model="value" :data="treeData" multiple check-strictly />
</template>

可搜索

设置 filterable,输入关键字过滤节点(自动展开匹配路径)。

vue
<template>
  <ExTreeSelect v-model="value" :data="treeData" filterable clearable />
</template>

禁用

整体禁用,或对单个节点设置 disabled(如示例中的 “Westbrook”)。

vue
<template>
  <ExTreeSelect v-model="value" :data="treeData" disabled />
</template>

API

Props

属性说明类型默认值
model-value / v-model绑定值:单选为值,多选为值数组string | number | Array | nullnull
data树形数据TreeSelectNode[][]
multiple是否多选(显示复选框)booleanfalse
check-strictly多选时父子节点选中状态不关联booleanfalse
disabled是否禁用booleanfalse
clearable是否可清空booleanfalse
filterable是否可搜索过滤booleanfalse
placeholder占位文本string内置「请选择」
size尺寸'small' | 'medium' | 'large'跟随全局配置
default-expand-all是否默认展开全部booleanfalse
collapse-tags多选时折叠超出标签booleanfalse
teleported弹层是否传送到 bodybooleantrue
popper-class弹层自定义类名string

TreeSelectNode

字段说明类型
value节点值(唯一)string | number
label节点显示文本string
children子节点TreeSelectNode[]
disabled是否禁用boolean

Events

事件名说明类型
update:model-value值更新(value) => void
change值变化(携带选中节点)(value, nodes) => void
visible-change面板显隐变化(visible: boolean) => void
expand节点展开/收起(keys) => void
focus / blur焦点事件(e: FocusEvent) => void
clear清空() => void

Methods

方法名说明类型
focus / blur聚焦 / 失焦() => void
expandAll / collapseAll展开 / 收起全部() => void

主题定制

TreeSelect 消费 ExUI 全局设计令牌:

css
:root {
  --ex-color-bg-secondary: #11151c;   /* 触发器背景 */
  --ex-color-bg-elevated: #0d1117;    /* 面板背景 */
  --ex-color-border-primary: #1f2a37; /* 边框 */
  --ex-color-primary: #29abe2;        /* 选中 / 勾选高亮 */
}

常见问题

Q:单选和多选的绑定值类型不同吗? 是的。单选为单个值(或 null),多选为值数组。切换 multiple 时请同步调整 v-model 初值。

Q:多选时绑定值包含哪些节点? 默认级联模式下,完全选中的父节点与其子节点都会出现在数组中;半选父节点不计入。开启 check-strictly 后仅包含被直接勾选的节点。

Q:搜索为什么会展开节点? 为了显示匹配项的完整路径,过滤期间会自动展开命中路径,清空搜索后恢复原展开状态。

最佳实践

  • 层级数据的选择(组织架构、地区、分类)用 TreeSelect 比扁平 Select 更直观。
  • 多选大数据量时配合 collapse-tags 控制触发器高度。
  • 通过节点的 disabled 精确控制不可选项;级联模式下禁用节点不会被父节点连带勾选。
  • 表单中放入 ExFormItem 即可参与校验。