表格树
树表使用嵌套数据展示层级。每条记录需要全树唯一的 rowKey(默认 id);rowParentKey(默认 parentId)用于本地新增子节点等操作,不会把扁平数组自动转换成树。
普通用法
数据的 children 数组保存子节点,defaultExpandAll 控制初始展开。点击「新增子级」后保存,done(row) 会根据 row.parentId 将新记录加入对应父节点。
普通树只需实际的 children 数据;hasChildren 用于懒加载提示,不应给已经完整返回子节点的普通树额外设置一个不匹配的 hasChildren。
自定义子字段时,可设置 tree: true 与 treeProps: { children: 'items', hasChildren: 'hasMore' }。开启树形多选后,若不希望父子关联,使用 treeProps.checkStrictly: true;具体能力依赖所用 Element Plus 版本。
表格树懒加载
设置 lazy: true,并给待加载节点 hasChildren: true。展开「研发中心」会调用 tree-load,返回固定的本地子节点;下方显示加载记录。加载后点击「刷新已加载子节点」,通过 updateKeyChildren 更新该节点,而不是重新加载整张表。
tree-load(row, treeNode, resolve) 的 resolve 必须接收数组;无子节点也要调用 resolve([])。对接接口时处理失败并结束节点加载态:
const treeLoad = async (row, treeNode, resolve) => {
try {
const children = await loadChildren(row.id);
resolve(children);
} catch (error) {
resolve([]);
// 使用项目的错误提示反馈请求失败。
}
};当前 CRUD 的懒加载回填会写入行的 children 字段,懒加载示例采用默认的 children/hasChildren 字段。自定义子字段的普通树可以配置 treeProps,懒加载场景不要直接照搬该配置。
updateKeyChildren(key, children) 更新的是底层懒加载缓存,还应同步自己的源数据,保证后续编辑、删除、导出使用相同记录。本例先更新父行的 children,再调用该方法。仅更新已加载节点,并确认所用 Element Plus 提供这个方法。
展开与选择
| 需求 | 用法 |
|---|---|
| 指定初始展开行 | option.expandRowKeys = [id1, id2] |
| 手动展开 / 收起某行 | crudRef.value.toggleRowExpansion(row, true / false) |
| 监听树节点展开 | expand-change(row, expanded),第二参数为布尔值 |
| 读取半选行 | crudRef.value.getHalfSelectionRows(),需底层版本支持 |
| 跨次加载保留勾选 | selection: true、reserveSelection: true 和稳定 rowKey |
不要把普通展开详情列的 expand-change(row, expandedRows) 与树节点事件混用:两者的第二个参数类型不同。
左树右表
左侧 tree 的节点点击刷新右侧 crud。两边是独立组件,业务自行把节点 ID 作为表格查询条件;改变节点时通常同时回到第 1 页。
