--- name: arco-vue-tree description: "Arco Design Vue 树 Tree 组件参考。用于 Vue 3、`@arco-design/web-vue`、``、属性、事件、插槽、示例和实现细节。" user-invocable: false --- # 树 Tree ## 简介 为每个节点赋予全局唯一的 `key`(必填项),`title` 为该节点显示的内容。 ## 基本用法 ```vue ``` ## API ### `` 属性 |参数名|描述|类型|默认值|版本| |---|---|---|:---:|:---| |size|尺寸|`'mini' \| 'small' \| 'medium' \| 'large'`|`'medium'`|| |block-node|节点是否占据一行|`boolean`|`false`|| |default-expand-all|是否默认展开父节点|`boolean`|`true`|| |multiple|是否支持多选|`boolean`|`false`|| |checkable|是否在节点前添加复选框,从 `2.27.0` 开始支持函数格式|`boolean\| (( node: TreeNodeData, info: { level: number; isLeaf: boolean; } ) => boolean)`|`false`|| |selectable|是否支持选择,从 `2.27.0` 开始支持函数格式|`boolean\| (( node: TreeNodeData, info: { level: number; isLeaf: boolean; } ) => boolean)`|`true`|| |check-strictly|是否取消父子节点关联|`boolean`|`false`|| |checked-strategy|定制回填方式
all: 返回所有选中的节点
parent: 父子节点都选中时只返回父节点
child: 只返回子节点|`'all' \| 'parent' \| 'child'`|`'all'`|| |default-selected-keys|默认选中的树节点|`Array`|`-`|| |selected-keys **(v-model)**|选中的树节点|`Array`|`-`|| |default-checked-keys|默认选中复选框的树节点|`Array`|`-`|| |checked-keys **(v-model)**|选中复选框的树节点|`Array`|`-`|| > 仅列出常用项,低频属性按需查阅官方 API。 ### `` 事件 |事件名|描述|参数| |---|---|---| |select|点击树节点时触发|selectedKeys: `Array`
data: `{ selected?: boolean; selectedNodes: TreeNodeData[]; node?: TreeNodeData; e?: Event; }`| |check|点击树节点复选框时触发。`halfCheckedKeys` 和 `halfCheckedNodes` 从 `2.19.0` 开始支持。|checkedKeys: `Array`
data: `{ checked?: boolean; checkedNodes: TreeNodeData[]; node?: TreeNodeData; e?: Event; halfCheckedKeys: (string \| number)[]; halfCheckedNodes: TreeNodeData[]; }`| |expand|展开/关闭|expandKeys: `Array`
data: `{ expanded?: boolean; expandNodes: TreeNodeData[]; node?: TreeNodeData; e?: Event; }`| |drag-start|节点开始拖拽|ev: `DragEvent`
node: `TreeNodeData`| |drag-end|节点结束拖拽|ev: `DragEvent`
node: `TreeNodeData`| |drag-over|节点被拖拽至可释放目标|ev: `DragEvent`
node: `TreeNodeData`| |drag-leave|节点离开可释放目标|ev: `DragEvent`
node: `TreeNodeData`| |drop|节点在可释放目标上释放|data: `{ e: DragEvent; dragNode: TreeNodeData; dropNode: TreeNodeData; dropPosition: number; }`| ### `` 方法 |方法名|描述|参数|返回值|版本| |---|---|---|---|:---| |scrollIntoView|虚拟列表滚动某个元素|options: `{ index?: number; key?: number \| string; align: 'auto' \| 'top' \| 'bottom'}`|-|| |getSelectedNodes|获取选中的节点|-|TreeNodeData[]|2.19.0| |getCheckedNodes|获取选中复选框的节点。支持传入 `checkedStrategy`,没有传则取组件的配置。|options: ` checkedStrategy?: 'all' \| 'parent' \| 'child'; includeHalfChecked?: boolean; `|TreeNodeData[]|2.19.0| |getHalfCheckedNodes|获取复选框半选的节点|-|TreeNodeData[]|2.19.0| |getExpandedNodes|获取展开的节点|-|TreeNodeData[]|2.19.0| |checkAll|设置全部节点的复选框状态|checked: ` boolean `|-|2.20.0| |checkNode|设置指定节点的复选框状态|key: ` TreeNodeKey \| TreeNodeKey[] `
checked: ` boolean `
onlyCheckLeaf: ` boolean `|-|2.20.0,onlyCheckLeaf from 2.21.0| |selectAll|设置全部节点的选中状态|selected: ` boolean `|-|2.20.0| |selectNode|设置指定节点的选中状态|key: ` TreeNodeKey \| TreeNodeKey[] `
selected: ` boolean `|-|2.20.0| |expandAll|设置全部节点的展开状态|expanded: ` boolean `|-|2.20.0| |expandNode|设置指定节点的展开状态|key: ` TreeNodeKey \| TreeNodeKey[] `
expanded: ` boolean `|-|2.20.0| ### `` 插槽 |插槽名|描述|参数|版本| |---|:---:|---|:---| |title|标题|title: `string`|| |extra|渲染额外的节点内容|-|| |drag-icon|定制 drag 图标|node: `TreeNodeData`|| |loading-icon|定制 loading 图标|-|| |switcher-icon|定制 switcher 图标|-|| |icon|定制节点图标|node: `TreeNodeData`|2.18.0| ### TreeNodeData |参数名|描述|类型|默认值| |---|---|---|:---:| |key|唯一标示|`string \| number`|`-`| |title|该节点显示的标题|`string`|`-`| |selectable|是否允许选中|`boolean`|`false`| |disabled|是否禁用节点|`boolean`|`false`| |disableCheckbox|是否禁用复选框|`boolean`|`false`| |checkable|是否显示多选框|`boolean`|`false`| |draggable|是否可以拖拽|`boolean`|`false`| |isLeaf|是否是叶子节点。动态加载时有效|`boolean`|`false`| |icon|节点的图标|`() => VNode`|`-`| |switcherIcon|定制 switcher 图标,优先级大于 tree|`() => VNode`|`-`| |loadingIcon|定制 loading 图标,优先级大于 tree|`() => VNode`|`-`| |dragIcon|定制 drag 图标,优先级大于 tree|`() => VNode`|`-`| > 仅列出常用项,低频属性按需查阅官方 API。 ### TreeFieldNames |参数名|描述|类型|默认值| |---|---|---|:---:| |key|指定 key 在 TreeNodeData 中的字段名|`string`|`key`| |title|指定 title 在 TreeNodeData 中的字段名|`string`|`title`| |disabled|指定 disabled 在 TreeNodeData 中的字段名|`string`|`disabled`| |children|指定 children 在 TreeNodeData 中的字段名|`string`|`children`| |isLeaf|指定 isLeaf 在 TreeNodeData 中的字段名|`string`|`isLeaf`| |disableCheckbox|指定 disableCheckbox 在 TreeNodeData 中的字段名|`string`|`disableCheckbox`| |checkable|指定 checkable 在 TreeNodeData 中的字段名|`string`|`checkable`| |icon|指定 icon 在 TreeNodeData 中的字段名|`string`|`checkable`| ### VirtualListProps |参数名|描述|类型|默认值|版本| |---|---|---|:---:|:---| |height|可视区域高度|`number \| string`|`-`|| |threshold|开启虚拟滚动的元素数量阈值,当数据数量小于阈值时不会开启虚拟滚动。|`number`|`-`|| |isStaticItemHeight|(已废除)元素高度是否是固定的。2.34.1 版本废除,请使用 `fixedSize`|`boolean`|`false`|| |fixedSize|元素高度是否是固定的。|`boolean`|`false`|2.34.1| |estimatedSize|元素高度不固定时的预估高度。|`number`|`-`|2.34.1| |buffer|视口边界外提前挂载的元素数量。|`number`|`10`|2.34.1| ## 常用模式 - **节点占一行**:节点占据一整行。 - **多选**:`Tree` 设置 `multiple` 属性为`true`,可以启用多选。 - **带复选框的树**:为 `Tree` 添加 `checkable` 属性即可使树具有复选框功能,可以用 `defaultCheckedKeys` 指定复选框默认选中的节点。 - **双向绑定**:`selectedKeys` 、 `checkedKeys` 、 `expandedKeys` 属性均可受控,不仅支持 `v-model` ,还可以在对应的 `select` / `check` / `expand` 事件中自行控制如何更新属性值。 - **动态加载**:动态加载节点。 - **拖拽**:可拖拽的树节点。 - **设置回填方式**:为 `Tree` 添加 `checkedStrategy` 可以设置选中时的回填方式 - **显示连接线**:为 `Tree` 添加 `showLine` 属性即可使树具有连接线 ## 最佳实践 - 新代码优先使用 Vue 3、Composition API 和 `