vue3 elementPlus el-tree组件 点击子组件的时候 获取其所有父组件的id

本文介绍了如何在Vue的el-tree组件中,通过`node-click`事件处理函数,利用递归方法获取选中节点及其所有父节点的ID。findParentNodes函数实现了从给定节点开始向上查找父节点的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

当点击某一分类的时候,获取其ID和其父的所有id

效果:

          <el-tree
            :data="deptOptions"
            :props="{ label: 'dictName', children: 'children' }"
            
            @node-click="handleNodeClick"
            @node-expand="handleNodeExpand"
            
          >
** 节点单击事件 */
function handleNodeClick(nodeData) {
  // 递归查找所有父节点
  const parentNodes = findParentNodes(nodeData);
  parentNodes.unshift(nodeData.id);
  let ids = parentNodes.reverse();
  console.log(ids);
}

function findParentNodes(nodeData) {
  const parentNodes = [];
  let treeref = proxy.$refs["deptTreeRef"];
  // console.log(nodeData);

  const findParent = (node) => {
    let pid = treeref.getNode(node).parent.data.id || 0;
    // console.log(pid);
    // console.log(treeref.getNode(node).parent.data);
    if (pid !== 0) {
      parentNodes.push(pid);
      findParent(treeref.getNode(node).parent.data);
    }
  };
  findParent(nodeData);
  return parentNodes;
}

<think>嗯,用户之前问过关于Element UI的el-tree的使用方法,现在他们转向了ElementPlusel-tree,特别是选中时返回数组的问题。我需要确认ElementPlusElement UI在这个功能上的差异。 首先,用户可能已经熟悉Element UI,但ElementPlus是基于Vue3的,语法和部分API可能有变化。需要检查ElementPlus的文档中关于el-tree的部分,尤其是选中事件和返回的数据结构。 用户提到“选中时返回数组”,这可能指的是复选框选中时的数据。在Element UI中,使用show-checkbox属性后,可以通过@check-change事件或使用getCheckedNodes方法获取选中的节点数组。ElementPlus是否保持相同的API呢? 需要验证ElementPlus事件名称是否有变化。例如,在Element UI中,复选框选中会触发check-change事件,而在ElementPlus中是否仍然如此?另外,node-key的作用是确保每个节点有唯一标识,这在处理数据时很重要。 接下来,用户可能需要具体的代码示例。我应该提供两种方法:一种是使用事件监听,另一种是使用refs主动获取。同时,需要说明数据结构,特别是使用node-key的重要性,以及如何通过配置props来适应不同的数据结构。 还要考虑用户可能遇到的常见问题,比如数据不更新,或者节点未正确返回。可能需要提醒他们检查数据响应性,使用Vue3的reactive或ref,以及是否正确设置了node-key。 另外,用户可能希望知道如何自定义节点属性,比如用id代替label作为标识。这时候需要展示如何配置props对象,确保组件能正确解析数据。 最后,总结应用场景,比如权限管理或菜单配置,帮助用户理解实际使用中的上下文。同时,强调参考官方文档的重要性,因为API可能会有更新或调整。</think>在 ElementPlus 的 `el-tree` 组件中,实现选中节点返回数组主要通过以下方式实现: --- ### 一、基础用法 ```vue <template> <el-tree :data="treeData" show-checkbox node-key="id" // 必填:节点唯一标识字段 @check="handleCheck" // 选中事件监听 :props="defaultProps" ref="treeRef" // 用于主动获取选中数据 ></el-tree> </template> ``` --- ### 二、核心配置 1. **数据结构要求**: ```javascript treeData: [ { id: 1, label: &#39;一节点&#39;, children: [ { id: 2, label: &#39;二节点&#39; } ] } ], defaultProps: { children: &#39;children&#39;, // 节点字段名 label: &#39;label&#39; // 显示文本字段名 } ``` 2. **获取选中数据的两种方式**: **方式一:通过事件监听** ```javascript const handleCheck = (checkedNode, checkedState) => { // checkedState 包含以下属性: console.log(&#39;已选节点数组:&#39;, checkedState.checkedNodes) console.log(&#39;已选ID数组:&#39;, checkedState.checkedKeys) } ``` **方式二:通过 ref 主动获取** ```javascript // 获取所有选中节点对象(包含节点) const nodes = this.$refs.treeRef.getCheckedNodes() // 仅获取选中节点的 key 值数组(推荐) const keys = this.$refs.treeRef.getCheckedKeys() ``` --- ### 三、进阶配置 1. **严格模式(不关联)**: ```vue <el-tree check-strictly :check-on-click-node="true"></el-tree> ``` 2. **默认选中项**: ```vue <el-tree :default-checked-keys="[2, 5]"></el-tree> ``` 3. **半选状态处理**: ```javascript // 获取半选中的节点(如节点部分选中) const halfChecked = this.$refs.treeRef.getHalfCheckedNodes() ``` --- ### 四、常见问题解决 1. **数据不更新**: - 确保使用 `Vue3` 的响应式数据(`reactive`/`ref`) - 更新数据后调用 `this.$refs.treeRef.setCheckedKeys(newKeys)` 2. **自定义返回格式**: ```javascript // 将节点数组转换为 ID 数组 const selectedIds = this.$refs.treeRef.getCheckedNodes() .map(node => node.id) ``` --- ### 五、典型应用场景 1. 权限管理系统(角色权限勾选) 2. 商品分类多选 3. 组织架构人员选择 4. 菜单配置层选择 > 建议通过组合 `check` 事件和 `getCheckedKeys` 方法实现业务逻辑,注意 `node-key` 必须设置且值唯一。详细文档可参考:[ElementPlus Tree 文档](https://element-plus.org/zh-CN/component/tree.html)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值