TreeSelect
概述
树选择组件,将树形数据(如组织架构、分类目录)以可展开的树形控件平铺展示,从中选择一个或多个节点。支持只选叶子、路径显示与异步加载树数据。
示例
给 items 传入树形数据(节点含 label 与 children),单选时初值为单个值。
ts
const { configurable } = AutoStoreSpaces;
const form = document.querySelector('#form');
const orgTree = {
id: 1,
label: '集团公司',
children: [
{ id: 11, label: '工程部' },
{ id: 12, label: '产品部' },
],
};
form.state = {
dept: configurable('', {
label: '部门',
widget: 'tree-select',
valueKey: 'label',
items: orgTree,
}),
};loading
指南
基础用法
树形数据由嵌套的节点对象组成,节点字段名通过 idKey/valueKey/labelKey 指定。defaultExpandLevel 控制初始展开层级:
ts
form.state = {
dept: configurable('', {
label: '部门',
widget: 'tree-select',
idKey: 'id',
valueKey: 'id',
labelKey: 'label',
defaultExpandLevel: 2,
items: [
{
id: 1,
label: '研发中心',
children: [
{ id: 11, label: '工程部' },
{ id: 12, label: '产品部' },
],
},
{
id: 2,
label: '营销中心',
children: [
{ id: 21, label: '销售部' },
],
},
],
}),
};多选
设置 multiple: true 开启多选,此时状态值为数组,父子节点可同时勾选:
ts
form.state = {
depts: configurable(['产品部'], {
label: '部门',
widget: 'tree-select',
multiple: true,
valueKey: 'label',
items: orgTree,
}),
};只选叶子
设置 onlySelectLeaf: true 后只允许选择叶子节点,父节点仅用于分组展开,不可选中。适合「必须挂到具体部门/分类」的场景:
ts
form.state = {
admin: configurable('', {
label: '部门',
widget: 'tree-select',
valueKey: 'label',
onlySelectLeaf: true,
items: orgTree,
}),
};异步加载
items 支持传入异步函数延迟加载树数据,加载期间树区域显示 loading 状态,加载完成后自动渲染:
ts
form.state = {
dept: configurable('', {
label: '部门',
widget: 'tree-select',
valueKey: 'label',
items: async () => {
// 这里可以是任意异步请求,如 fetch('/api/orgs')
await new Promise((resolve) => setTimeout(resolve, 1000));
return {
id: 1,
label: '集团公司',
children: [
{ id: 11, label: '工程部' },
{ id: 12, label: '产品部' },
],
};
},
}),
};loading
属性
| 属性 | 类型 | 默认值 | 说明 |
|---|---|---|---|
items | TreeNodes | (() => TreeNodes | Promise<TreeNodes>) | 必填 | 树形数据(单根节点或节点数组),或其异步提供者 |
idKey | string | "id" | 节点 id 字段名 |
valueKey | string | "id" | 节点取值字段名 |
labelKey | string | "label" | 节点显示字段名 |
multiple | boolean | false | 是否多选 |
defaultExpandLevel | number | 2 | 初始展开层级 |
onlySelectLeaf | boolean | false | 只允许选择叶子节点 |
showAsPath | boolean | false | 选中项是否按 labelKey 组成路径显示 |
onSelectionChange | (selection: TreeSelectedItem[]) => void | — | 选中项变化回调(含 id/value/path) |
注意事项
- 树数据配置键是
items(不是choices),节点取值默认取idKey字段而非valueKey字段,需按valueKey/idKey分别指定。 - 多选时状态值是数组(初值也应给数组),单选时是单个值。
showAsPath只在下拉形态(tree-dropdown)的选择框中有直观体现,本组件平铺展示时主要用于onSelectionChange回调中的路径信息。