Tree 树型
常用的树型组件
普通用法
option配置属性,data为数据,node-click为点击事件,node-contextmenu右键事件
多选
multiple配置为true即可开启多选,check-change方法为回调函数
配置属性
打开前和关闭前
before-open打开前的方法,before-close关闭前的方法
事件和自定义
option配置属性即可,data为可配置项目,具体参考下表文档
拖拽
权限
懒加载
lazy设置为true即可,完后在treeLoad函数里面处理逻辑,具体看下面例子
虚拟
虚拟模式使用 Element Plus TreeV2,适合较多节点;请设置可见高度,并根据数据规模验证交互。
virtualize 设置为 true 开启虚拟列表,height 设置可见区域高度。
Props
| 参数 | 说明 | 类型 | 默认值 |
|---|---|---|---|
| option | 树和编辑表单的配置 | object | {} |
| data | 树节点数组 | array | [] |
| modelValue / v-model | 新增、编辑弹窗中的表单对象,不是选中节点 | object | {} |
| loading | 树区域加载状态 | boolean | false |
| permission | 权限对象或 (key, data) => boolean | object / function | {} |
| beforeOpen / beforeClose | 弹窗打开 / 关闭前钩子 (done, type),调用 done() 才继续 | function | — |
| filterNodeMethod | 自定义筛选函数 (value, data) => boolean | function | — |
| expandOnClickNode | 点击节点时是否展开 | boolean | false |
| checkOnClickNode / checkOnClickLeaf | 点击节点 / 叶子节点是否切换勾选 | boolean | false |
| indent / iconClass | 缩进像素 / 自定义展开图标 | number / string | — |
beforeOpen / beforeClose 是函数属性,请用 :before-open="beforeOpen" 传入,不能写成事件监听。type 为 add(子节点)、parentAdd(顶层节点)或 edit。
Option
| 参数 | 说明 | 默认值 |
|---|---|---|
| props | 节点字段映射,见下表 | {} |
| multiple | 显示复选框进行多选 | 未开启 |
| checkStrictly / accordion | 勾选父子不关联 / 手风琴展开 | 未开启 |
| defaultExpandAll / defaultExpandedKeys | 初始展开全部 / 指定键数组 | — |
| virtualize / height | 使用 TreeV2 / 可见区域高度 | 未开启 / — |
| lazy / treeLoad | 懒加载 / (node, resolve) => void 加载函数 | 未开启 / — |
| draggable / allowDrag / allowDrop | 拖拽开关与判断函数,透传给底层树 | — |
| menu | 显示节点右键菜单 | true |
| filter / filterText | 显示筛选输入框 / 输入提示 | true / 语言包文案 |
| addBtn / editBtn / delBtn | 新增、编辑、删除菜单开关 | true |
| addBtnText / editBtnText / delBtnText / updateBtnText | 按钮文字 | 语言包文案 |
| formOption | 编辑弹窗内的完整 avue-form 配置,需要自行提供 column | {} |
| title / dialogWidth | 编辑窗口标题 / 宽度 | 新增标题文案 / 50% |
| size | 控件尺寸 | — |
虚拟树和普通树的底层能力不同,不应同时假定 TreeV2 支持普通 Tree 的所有懒加载、拖拽或实例方法。
Option.props 与节点数据
| 映射项 | 含义 | 默认字段 |
|---|---|---|
| label | 节点标题,默认筛选依赖该字段为字符串 | label |
| value | 节点唯一键,同时作为底层 node-key | value |
| children | 子节点数组 | children |
| leaf | 懒加载叶子节点标记 | leaf |
| disabled | 禁用节点 | disabled |
如果业务用 id 作为主键,应设置 option.props.value = 'id',保持各节点唯一且类型一致。option.nodeKey 不是当前模板实际绑定的节点键,不应依赖它替代 props.value。
Events
| 事件名 | 参数 | 说明 |
|---|---|---|
| update:modelValue / change | form | 弹窗表单对象同步 |
| save | node, data, done, loading | 新增提交;成功后调用 done(savedData?) 更新树并关闭,失败时调用 loading() 结束提交状态 |
| update | node, data, done, loading | 编辑提交;成功后调用 done(savedData?) 替换节点并保留子节点 |
| del | node, done | 删除请求;调用 done() 后从树中移除 |
| node-click / node-expand | data, node, nodeComponent | 点击 / 展开节点 |
| node-contextmenu | data, node, nodeComponent | 节点右键菜单事件,不包含原始鼠标事件 |
| check-change | data, checked, indeterminate | 勾选状态变化 |
| node-drag-start | node, event | 开始拖拽 |
| node-drag-enter / node-drag-leave / node-drag-over | draggingNode, dropNode, event | 拖拽经过节点 |
| node-drag-end / node-drop | draggingNode, dropNode, dropType, event | 拖拽结束 / 放置 |
组件不负责接口持久化。在保存回调中取得后端生成的唯一键后再调用 done(savedData),避免新增节点没有有效 props.value。删除回调的第一个参数是底层 Node 包装对象,业务数据位于 node.data。
Methods
在挂载后通过组件 ref 调用。下列方法代理到底层树,具体参数与返回值遵循已安装 Element Plus 对应版本;虚拟模式只可调用 TreeV2 实际提供的方法。
| 方法 | 用途 |
|---|---|
| filter(value) | 过滤节点 |
| getCheckedNodes(leafOnly?, includeHalfChecked?) / getCheckedKeys(leafOnly?) | 获取勾选数据 / 键 |
| setCheckedNodes(nodes) / setCheckedKeys(keys, leafOnly?) / setChecked(keyOrData, checked, deep?) | 设置勾选状态 |
| getHalfCheckedNodes() / getHalfCheckedKeys() | 获取半选节点 / 键 |
| getCurrentKey() / getCurrentNode() | 获取当前高亮节点的键 / 数据 |
| setCurrentKey(key) / setCurrentNode(node) | 设置当前高亮节点 |
| getNode(keyOrData) | 获取 Node 包装对象 |
| updateKeyChildren(key, data) | 更新指定节点的子节点 |
| append(data, parent?) / insertBefore(data, reference) / insertAfter(data, reference) / remove(dataOrNode) | 增删节点 |
| parentAdd() | 打开顶层节点新增窗口 |
| hide() | 按关闭前钩子流程关闭编辑窗口 |
Slots
| 名称 | 说明 | 参数 |
|---|---|---|
| default | 节点内容 | { node, data } |
| menu | 节点右键菜单附加内容 | { node } |
| add-btn | 替换顶部新增按钮;需开启 filter 和 addBtn | 无 |
