用 ref 控制下拉树形菜单节点选中状态的核心是通过 ref 获取 el-tree 实例并调用其方法:设置 node-key 后可用 setcheckedkeys(多选)、setcurrentkey(单选高亮)、setchecked(单节点控制);需配合 $nexttick 确保数据渲染完成,监听 node-click 同步下拉与树状态,并用 getcheckedkeys 或 getcheckednodes 获取选中数据。

用 ref 控制下拉树形菜单节点的选中状态,核心是拿到 el-tree 实例后调用其方法或设置响应式属性。常见场景包括:默认选中指定节点、点击下拉项后同步选中树节点、手动触发全选/反选等。
通过 ref 调用实例方法选中节点
给 el-tree 设置 ref 和唯一标识字段 node-key(如 id),就能用 setCheckedKeys 或 setCurrentKey 精准控制:
-
this.$refs.treeRef.setCheckedKeys([101, 102])—— 多选,传入 ID 数组,要求节点已渲染且show-checkbox开启 -
this.$refs.treeRef.setCurrentKey(101)—— 单选高亮,配合highlight-current使用 -
this.$refs.treeRef.setChecked(node, true, false)—— 单个节点设为选中,第三个参数false表示不联动父/子节点
结合下拉框实现“选中即同步树节点”
当 el-select 内嵌 el-tree 时,用户点选下拉项,需让树同步状态:
- 监听
@node-click="handleNodeClick",在回调里调用this.$refs.treeRef.setCheckedKeys([node.id]) - 若要关闭下拉框,加一句
this.$refs.selectRef.blur() - 注意:必须等树数据渲染完成再操作,建议包裹在
this.$nextTick中
动态设置前确保数据已就位
接口返回树数据后,不能立刻调用 setCheckedKeys,否则无效:
- 推荐写法:
this.$nextTick(() => this.$refs.treeRef.setCheckedKeys(selectedIds)) - 如果树用了
v-if控制显隐,确保它已挂载(比如v-if="treeData.length") - 检查
node-key是否与数据中字段一致(如后端返回key字段,就得写node-key="key")
获取当前选中节点用于回显或提交
提交表单前,常需把用户选中的树节点转成 ID 列表或完整对象:
-
this.$refs.treeRef.getCheckedKeys()→ 返回选中节点 ID 数组 -
this.$refs.treeRef.getCheckedNodes()→ 返回选中节点完整对象数组(含 label、children 等) - 若启用级联(
check-strictly=false),getCheckedNodes只返回叶子节点;若禁用级联(check-strictly=true),则返回所有被勾选的节点(含中间节点)
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!










