Tree 树形控件
用清晰的层级结构展示信息。
基础用法
基础的树形结构。
可选
用于节点选择。
该示例还展示了如何异步加载节点数据。
警告
当使用 show-checkbox 时,由于 `check-on-click-leaf` 默认为 true,可以通过点击最后的子节点来选中它们。
懒加载自定义叶子节点
在懒加载模式下,节点数据只有在点击时才进行获取,因此 Tree 组件无法预先判断该节点是否为叶子节点。 这就是为什么每个节点都会添加一个下拉按钮,如果它是一个叶子节点,则在点击后下拉按钮会消失。 话虽如此,您也可以提前告知 Tree 组件该节点是否为叶子节点,从而避免在叶子节点前渲染下拉按钮。
懒加载失败重试 2.6.3
当远程懒加载节点数据时,懒加载有时可能会失败。 在这种情况下,您可以调用 reject 来保持节点状态不变,并允许远程加载继续。
禁用复选框
节点的复选框可以被设置为禁用。
在示例中,'disabled' 属性在 defaultProps 中声明,并且某些节点被设置为 'disabled:true'。 相应的复选框被禁用,无法点击。
默认展开和默认选中
树节点可以初始展开或选中
使用 `default-expanded-keys` 和 `default-checked-keys` 来分别设置默认展开和默认选中的节点。 请注意,要使它们起作用,`node-key` 是必需的。 它的值是数据对象中一个键的名称,并且该键的值在整个树中应该是唯一的。
选中树节点
本例展示了如何获取和设置选中节点。 它们都可以通过两种方法完成:节点和键。 如果您使用键方法,则需要 `node-key`。
自定义节点内容
树节点的内容可以自定义,因此您可以随心所欲地添加图标或按钮
自定义树节点模板有两种方法:`render-content` 和作用域插槽。 使用 `render-content` 来分配一个返回树节点内容的渲染函数。 有关渲染函数的详细介绍,请参阅 Vue 的文档。 如果您更喜欢作用域插槽,您将可以在作用域中访问 `node` 和 `data`,分别代表当前节点的 TreeNode 对象和节点数据。 请注意,`render-content` 演示无法在 JSFiddle 中运行,因为它不支持 JSX 语法。 在实际项目中,如果相关依赖项配置正确,`render-content` 将会起作用。
自定义节点类名
树节点的类可以自定义
使用 `props.class` 来构建节点的类名。
树节点过滤
可以对树节点进行过滤
调用 Tree 实例的 `filter` 方法来过滤树节点。 它的参数是过滤关键字。 请注意,要使其起作用,需要 `filter-node-method`,它的值是过滤方法。
手风琴
同一级别的节点一次只能展开一个。
可拖拽
通过添加 `draggable` 属性,您可以拖放树节点。
属性
名称 | 描述 | 类型 | 默认值 |
---|---|---|---|
data | 树数据 | object | — |
empty-text | 数据为空时显示的文本 | string | — |
node-key | 节点的唯一标识键名,其值在整个树中应唯一 | string | — |
props | 配置选项,请参见下表 | object | — |
render-after-expand | 是否在父节点第一次展开后才渲染其子节点 | boolean | true |
load | 加载子树数据的方法,仅在 `lazy` 为 true 时有效 | Function | — |
render-content | 树节点的渲染函数 | Function | — |
highlight-current | 是否高亮当前节点 | boolean | false |
default-expand-all | 是否默认展开所有节点 | boolean | false |
expand-on-click-node | 是否在点击节点时展开或折叠节点,如果为 false,则仅在点击箭头图标时展开或折叠节点。 | boolean | true |
check-on-click-node | 是否在点击节点时选中或取消选中节点,如果为 false,则只能通过点击复选框来选中或取消选中节点。 | boolean | false |
check-on-click-leaf 2.9.6 | 是否在点击叶子节点(最后的子节点)时选中或取消选中节点。 | boolean | true |
auto-expand-parent | 展开子节点的时候是否自动展开父节点 | boolean | true |
default-expanded-keys | 初始展开节点的键数组 | object | — |
show-checkbox | 节点是否可选 | boolean | false |
check-strictly | 当 `show-checkbox` 为 `true` 时,节点的选中状态是否不影响其父节点和子节点 | boolean | false |
default-checked-keys | 初始选中节点的键数组 | object | — |
current-node-key | 初始选中节点的键 | string / number | — |
filter-node-method | 使用过滤方法时,此函数将在每个节点上执行。如果返回 `false`,树节点将被隐藏。 | Function | — |
accordion | 是否每次只打开一个同级树节点 | boolean | false |
indent | 相邻层级节点之间的水平缩进(以像素为单位) | number | 18 |
icon | 自定义树节点图标组件 | string / Component | — |
lazy | 是否懒加载叶子节点,与 `load` 属性一起使用 | boolean | false |
draggable | 是否开启拖拽节点功能 | boolean | false |
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 | 通过数据或 key 获取节点 | (data) 节点的数据或 key |
remove | 移除一个节点,仅在指定了 node-key 时有效 | (data) 待删除节点的数据或节点 |
append | 向树中的给定节点追加一个子节点 | (data, parentNode) 1. 待追加的子节点数据 2. 父节点的数据、key 或节点 |
insertBefore | 在树中的给定节点之前插入一个节点 | (data, refNode) 1. 待插入的节点数据 2. 参考节点的数据、key 或节点 |
insertAfter | 在树中的给定节点之后插入一个节点 | (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 本身 |
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 | 空状态,您可以自定义数据为空时的内容。 |