Tree 树形控件

用清晰的层级结构展示信息。

基础用法

基础的树形结构。

可选

用于节点选择。

该示例还展示了如何异步加载节点数据。

警告

当使用 show-checkbox 时,由于 `check-on-click-leaf` 默认为 true,可以通过点击最后的子节点来选中它们。

懒加载自定义叶子节点

由于节点数据不是一次性获取的,所以 Tree 组件无法判断当前节点是否为叶子节点,所以会为每个节点都渲染一个下拉按钮,你可以在点击节点后,动态告知 Tree 组件当前节点是否为叶子节点,从而让 Tree 组件移除当前节点的下拉按钮。

多次懒加载 2.6.3

远程懒加载节点数据时,有时懒加载可能会失败。 在这种情况下,你可以调用 reject 以保持节点状态不变并允许继续远程加载。

禁用复选框

节点的复选框可以被设置为禁用。

在这个例子中,`disabled` 属性在 `defaultProps` 中声明,一些节点被设置为 `disabled:true`。 相应的复选框被禁用并且不能被点击。

默认展开和默认选中

树节点可以初始展开或选中

使用 default-expanded-keysdefault-checked-keys 来分别设置默认展开和默认选中的节点。 请注意,为使其生效,需要设置 node-key。 它的值是数据对象中一个键的名称,该键的值在整个树中应该是唯一的。

一级 2
一级 3

树节点的可选择

本例展示了如何获取和设置选中节点。 它们都可以通过两种方式完成:通过节点和通过键。 如果你使用键的方式,则需要设置 node-key

一级 1
二级 1-1
三级 1-1-1
三级 1-1-2
一级 2
二级 2-1
二级 2-2
一级 3
二级 3-1
二级 3-2

自定义节点内容

树节点的内容可以自定义,因此您可以随心所欲地添加图标或按钮

自定义树节点模板有两种方法:`render-content` 和作用域插槽。 使用 `render-content` 来分配一个返回树节点内容的渲染函数。 有关渲染函数的详细介绍,请参阅 Vue 的文档。 如果你更喜欢作用域插槽,你将可以访问作用域中的 nodedata,它们分别代表当前节点的 TreeNode 对象和节点数据。 请注意,`render-content` 演示无法在 JSFiddle 中运行,因为它不支持 JSX 语法。 在一个真实的项目中,如果正确配置了相关的依赖项,`render-content` 就会起作用。

使用 render-content

一级 1
二级 1-1
三级 1-1-1
三级 1-1-2
一级 2
二级 2-1
二级 2-2
一级 3
二级 3-1
二级 3-2

使用作用域插槽

一级 1
二级 1-1
三级 1-1-1
三级 1-1-2
一级 2
二级 2-1
二级 2-2
一级 3
二级 3-1
二级 3-2

自定义节点类名

树节点的类可以自定义

使用 props.class 构建节点的类名。

一级 1
二级 1-1
三级 1-1-1
三级 1-1-2
一级 2
二级 2-1
二级 2-2
一级 3
二级 3-1
二级 3-2

树节点的过滤

可以对树节点进行筛选操作

调用 Tree 实例的 `filter` 方法来筛选树节点。 它的参数是筛选关键字。 请注意,为了使其生效,需要设置 `filter-node-method`,它的值是筛选方法。

一级 1
二级 1-1
三级 1-1-1
三级 1-1-2
一级 2
二级 2-1
二级 2-2
一级 3
二级 3-1
二级 3-2

手风琴

同一时间,只可以展开一个同级节点。

可拖拽

你可以通过添加一个 `draggable` 属性来拖放树节点。

一级 1
二级 1-1
三级 1-1-1
一级 2
二级 2-1
三级 2-1-1
二级 2-2
三级 2-2-1
一级 3
二级 3-1
三级 3-1-1
二级 3-2
三级 3-2-1

属性

名称描述类型默认值
data树数据object
empty-text数据为空时显示的文本string
node-key节点的唯一标识键名,其值在整个树中应唯一string
props配置选项,请参见下表object
render-after-expand是否在第一次展开某个树节点后才渲染其子节点booleantrue
load加载子树数据的方法,仅当 `lazy` 为 true 时生效Function
render-content树节点内容的渲染函数Function
highlight-current是否高亮当前节点booleanfalse
default-expand-all是否默认展开所有节点booleanfalse
expand-on-click-node是否在点击节点时展开或折叠节点,如果为 false,则仅在点击箭头图标时展开或折叠节点。booleantrue
check-on-click-node是否在点击节点时选中或取消选中节点,如果为 false,则只能通过点击复选框来选中或取消选中节点。booleanfalse
check-on-click-leaf 2.9.6是否在点击叶子节点(最后的子节点)时选中或取消选中节点。booleantrue
auto-expand-parent展开子节点的时候是否自动展开父节点booleantrue
default-expanded-keys初始展开节点的键数组object
show-checkbox节点是否可选booleanfalse
check-strictly当 `show-checkbox` 为 `true` 时,节点的选中状态是否不影响其父节点和子节点booleanfalse
default-checked-keys初始选中节点的键数组object
current-node-key初始选中节点的键string / number
filter-node-method使用过滤方法时,此函数将在每个节点上执行。如果返回 `false`,树节点将被隐藏。Function
accordion是否每次只打开一个同级树节点booleanfalse
indent相邻层级节点之间的水平缩进(以像素为单位)number18
icon自定义树节点图标组件string / Component
lazy是否懒加载子节点,需与 `load` 方法结合使用booleanfalse
draggable是否开启拖拽节点功能booleanfalse
allow-drag判断节点能否被拖拽。 如果返回 `false`,节点不能被拖拽。Function
allow-drop在拖动节点被放下之前执行此函数。 如果返回 `false`,则拖动节点不能在目标节点处被放下。 `type` 有三个可能的值:'prev' (将拖动节点插入到目标节点之前),'inner' (将拖动节点插入到目标节点) 和 'next' (将拖动节点插入到目标节点之后)Function

props

属性描述类型默认值
label指定节点对象的哪个键用作节点的标签string / Function
children指定哪个节点对象用作节点的子树string
disabled指定节点对象的哪个键表示节点的复选框是否被禁用string / Function
isLeaf指定节点是否为叶子节点,仅在启用懒加载时有效string / Function
class自定义节点类名string / Function

方法

`Tree` 有以下方法,它返回当前选中的节点数组。

方法描述参数
filter过滤所有树节点,被过滤的节点将被隐藏接受一个参数,该参数将作为 filter-node-method 的第一个参数
updateKeyChildren设置节点的新数据,仅在指定 `node-key` 时有效(key, data) 接受两个参数:1. 节点的 key 2. 新数据
getCheckedNodes如果节点可选(`show-checkbox` 为 `true`),则返回当前选中的节点数组(leafOnly, includeHalfChecked) 接受两个布尔类型的参数:1. 默认值为 `false`。 如果参数为 `true`,则只返回当前选中的子节点数组。 2. 默认值为 `false`。 如果参数为 `true`,返回值将包含半选中的节点。
setCheckedNodes设置某些节点为选中状态,仅在指定 `node-key` 时有效一个要被选中的节点数组
getCheckedKeys如果节点可选(`show-checkbox` 为 `true`),则返回当前选中的节点键数组(leafOnly) 接受一个布尔类型的参数,其默认值为 `false`。 如果参数为 `true`,它只返回当前选中的子节点数组。
setCheckedKeys设置某些节点为选中状态,仅在指定 `node-key` 时有效(keys, leafOnly) 接受两个参数:1. 一个要被选中的节点 key 的数组 2. 一个布尔参数。 如果设置为 `true`,则只设置叶子节点的选中状态。 默认值为 `false`。
setChecked设置节点是否被选中,仅在指定了 `node-key` 时有效(key/data, checked, deep) 接受三个参数:1. 要选中的节点的 key 或 data 2. 一个布尔类型的参数,表示选中或不选中。 3. 一个布尔类型的参数,表示是否深度选中。
getHalfCheckedNodes如果节点可选(`show-checkbox` 为 `true`),则返回当前半选中的节点数组
getHalfCheckedKeys如果节点可选(`show-checkbox` 为 `true`),则返回当前半选中的节点键数组
getCurrentKey返回高亮节点的 key (如果没有节点被高亮,则为 null)
getCurrentNode返回高亮节点的数据 (如果没有节点被高亮,则为 null)
setCurrentKey通过 key 设置高亮节点,仅在指定了 `node-key` 时有效(key, shouldAutoExpandParent=true) 1. 要高亮的节点的 key。 如果为 `null`,则取消当前高亮的节点 2. 是否自动展开父节点
setCurrentNode设置高亮节点,仅在指定 `node-key` 时有效(node, shouldAutoExpandParent=true) 1. 要高亮的节点 2. 是否自动展开父节点
getNode通过 data 或 key 获取节点(data) 节点的 data 或 key
remove删除一个节点,仅在分配了 node-key 时有效(data) 要删除的节点的 data 或 node
append在树中将一个子节点追加到给定节点(data, parentNode) 1. 要追加的子节点的 data 2. 父节点的 data, key 或 node
insertBefore在树中将一个节点插入到给定节点之前(data, refNode) 1. 要插入的节点的 data 2. 参考节点的 data, key 或 node
insertAfter在树中将一个节点插入到给定节点之后(data, refNode) 1. 要插入的节点的 data 2. 参考节点的 data, key 或 node

事件

名称描述参数
node-click当节点被点击时触发四个参数:对应于被点击节点的节点对象,TreeNode 的 `node` 属性,TreeNode 本身,事件对象
node-contextmenu当节点被右键点击时触发四个参数:事件,对应于被点击节点的节点对象,TreeNode 的 `node` 属性,TreeNode 本身
check-change当节点的选中状态改变时触发三个参数:对应于其选中状态改变的节点的节点对象,该节点是否被选中,该节点的子树是否有选中节点
check点击节点的复选框后触发两个参数:对应于被选中/取消选中的节点的节点对象,树的选中状态对象,它有四个属性:checkedNodes, checkedKeys, halfCheckedNodes, halfCheckedKeys
current-change当前节点改变时触发两个参数:对应于当前节点的节点对象,TreeNode 的 `node` 属性
node-expand当前节点打开时触发三个参数:对应于被打开节点的节点对象,TreeNode 的 `node` 属性,TreeNode 本身
node-collapse当前节点关闭时触发三个参数:对应于被关闭节点的节点对象,TreeNode 的 `node` 属性,TreeNode 本身
node-drag-start拖动开始时触发两个参数:对应于拖动节点的节点对象,事件。
node-drag-enter当拖动节点进入另一个节点时触发三个参数:对应于拖动节点的节点对象,对应于进入节点的节点对象,事件。
node-drag-leave当拖动节点离开一个节点时触发三个参数:对应于拖动节点的节点对象,对应于离开节点的节点对象,事件。
node-drag-over当拖动经过一个节点时触发 (类似于 mouseover 事件)三个参数:对应于拖动节点的节点对象,对应于拖动经过的节点的节点对象,事件。
node-drag-end拖动结束时触发四个参数:对应于拖动节点的节点对象,对应于拖动结束节点的节点对象 (可能为 `undefined`),节点放置类型 (before / after / inner),事件。
node-drop拖动节点被放下后触发四个参数:对应于拖动节点的节点对象,对应于被放下节点的节点对象,节点放置类型 (before / after / inner),事件。

插槽

名称描述
树节点的自定义内容。作用域参数是 `{ node, data }`
empty 空状态 2.3.4空状态,您可以自定义数据为空时的内容。

来源

组件样式文档

贡献者