Tree 树形控件

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

基础用法

基础的树形结构。

可选

用于节点选择。

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

警告

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

懒加载自定义叶子节点

在点击节点之前,节点的数据不会被提取,因此 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

Tree API

属性

名称描述类型默认值
data树数据array
empty-text数据为空时显示的文本string
每个树节点用来作为唯一标识的属性,在整棵树中应该是唯一的节点的唯一标识键名,其值在整个树中应唯一string
props配置选项,请参见下表object
是否在第一次展开父节点后才渲染子节点是否在第一次展开父节点后才渲染子节点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
展开子节点时是否自动展开父节点展开子节点时是否自动展开父节点booleantrue
default-expanded-keys初始展开节点的键数组array
show-checkbox节点是否可选booleanfalse
check-strictly当 `show-checkbox` 为 `true` 时,节点的选中状态是否不影响其父节点和子节点booleanfalse
default-checked-keys初始选中节点的键数组array
current-node-key初始选中节点的键string / number
对树节点进行筛选时执行的方法使用过滤方法时,此函数将在每个节点上执行。如果返回 `false`,树节点将被隐藏。Function
accordion是否每次只打开一个同级树节点展开booleanfalse
indent相邻层级节点之间的水平缩进(以像素为单位)number18
icon自定义树节点图标组件string / Component
lazy是否懒加载叶子节点,需与 load 属性结合使用booleanfalse
draggable是否开启拖拽节点功能booleanfalse
判断节点能否被拖拽该函数在拖拽节点前执行。如果返回 false,则该节点无法被拖拽Function
拖拽时判定目标节点能否被放置该函数在拖拽节点放置前执行。如果返回 false,则拖拽节点无法放置在目标节点。type 有三个可能的值:'prev'(将拖拽节点插入到目标节点前)、'inner'(将拖拽节点插入到目标节点内)和 'next'(将拖拽节点插入到目标节点后)Function

props

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

暴露

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

方法描述参数
filter过滤所有树节点,被过滤的节点将被隐藏接收一个参数,该参数将作为 filter-node-method 的第一个参数
更新节点的子节点为节点设置新数据,仅在指定了 node-key 时生效(key, data) 接收两个参数:1. 节点的 key 2. 新数据
getCheckedNodes如果节点可选(`show-checkbox` 为 `true`),则返回当前选中的节点数组(leafOnly, includeHalfChecked) 接收两个布尔类型参数:1. 默认值为 false。如果参数为 true,它只返回当前选中的子节点数组。2. 默认值为 false。如果参数为 true,返回值将包含半选节点
设置选中节点设置某些节点为选中状态,仅在指定了 node-key 时生效(nodes, leafOnly) 接收两个参数:1. 要选中的节点对象数组 2. 布尔类型参数。如果设置为 true,则仅设置叶子节点的选中状态。默认值为 false
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 或数据 2. 一个布尔参数,指示是否选中。3. 一个布尔参数,指示是否递归地选中/取消选中子节点(自 2.14.0 起,无论 check-strictly 设置如何,此参数都有效)。
getHalfCheckedNodes如果节点可选(`show-checkbox` 为 `true`),则返回当前半选中的节点数组
getHalfCheckedKeys如果节点可选(`show-checkbox` 为 `true`),则返回当前半选中的节点键数组
getCurrentKey返回当前高亮节点的 key(如果没有高亮节点则返回 null)
getCurrentNode返回当前高亮节点的数据(如果没有高亮节点则返回 null)
setCurrentKey通过 key 设置高亮节点,仅在指定了 node-key 时生效(key, shouldAutoExpandParent=true) 1. 要高亮的节点 key。如果为 null,则取消当前高亮节点 2. 是否自动展开父节点
设置当前节点设置高亮节点,仅在指定了 node-key 时生效(node, shouldAutoExpandParent=true) 1. 要高亮的节点 2. 是否自动展开父节点
getNode通过数据或 key 获取节点(data) 节点的数据或 key
删除删除一个节点,仅在指定了 node-key 时生效(data) 要删除的节点数据或节点对象
append为树中的给定节点追加一个子节点(data, parentNode) 1. 要追加的子节点数据 2. 父节点的数据、key 或节点对象
向前插入在树中给定节点前插入一个节点(data, refNode) 1. 要插入的节点数据 2. 参考节点的数据、key 或节点对象
向后插入在树中给定节点后插入一个节点(data, refNode) 1. 要插入的节点数据 2. 参考节点的数据、key 或节点对象

事件

名称描述参数
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 实例本身
节点拖拽开始在节点开始拖拽时触发两个参数:对应拖拽节点的节点对象、事件对象。
节点拖拽进入在拖拽节点进入其他节点时触发三个参数:对应拖拽节点的节点对象、对应进入节点的节点对象、事件对象。
节点拖拽离开在拖拽节点离开某个节点时触发三个参数:对应拖拽节点的节点对象、对应离开节点的节点对象、事件对象。
节点拖拽经过在节点上拖拽时触发(类似于 mouseover 事件)三个参数:对应拖拽节点的节点对象、对应拖拽经过节点的节点对象、事件对象。
节点拖拽结束在拖拽结束时触发四个参数:对应拖拽节点的节点对象、对应拖拽结束节点的节点对象(可能为 undefined)、节点放置类型(before / after / inner)、事件对象。
节点放置在拖拽节点成功放置后触发四个参数:对应拖拽节点的节点对象、对应放置节点的节点对象、节点放置类型(before / after / inner)、事件对象。

插槽

名称描述类型
default自定义树节点的内容object
空数据 2.3.4数据为空时的自定义内容

类型声明

显示声明
ts
interface RootTreeType {
  root: Ref<Node>
  // ...
}

// UnwrapRef<RootTreeType['root']> => Node
type Node = {
  canFocus: boolean
  checked: boolean
  childNodes: Node[]
  data: TreeNodeData
  expanded: boolean
  id: number
  indeterminate: boolean
  isCurrent: boolean
  isEffectivelyChecked: boolean
  isLeaf?: boolean
  isLeafByUser?: boolean
  level: number
  loaded: boolean
  loading: boolean
  parent: Node | null
  store: TreeStore
  text: string | null
  visible: boolean
}

// TreeNodeData => Tree / TreeOptionProps
// Tree type is your prop type.
// TreeOptionProps is default prop type
interface TreeOptionProps {
  children?: string
  label?: string | ((data: TreeNodeData, node: Node) => string)
  disabled?: string | ((data: TreeNodeData, node: Node) => boolean)
  isLeaf?: string | ((data: TreeNodeData, node: Node) => boolean)
  class?: (
    data: TreeNodeData,
    node: Node
  ) => string | { [key: string]: boolean }
}

来源

组件样式文档

贡献者