el-tree选中数据重组成树

发布于:2025-02-22 ⋅ 阅读:(15) ⋅ 点赞:(0)

在使用 Element UI 的 <el-tree> 组件时,如果你希望在选中数据后将它们重组为树结构,通常是因为你需要根据这些选中的数据来重新构建一个树形结构,或者对这些选中的数据进行进一步的处理。这里我将提供一个基本的思路和示例代码,帮助你实现这一需求。

步骤 1: 初始化数据

首先,确保你的数据是树形结构的。例如,你可能有一个这样的数据结构:

const treeData = [

  {

    id: 1,

    label: 'Node 1',

    children: [

      { id: 2, label: 'Node 1-1' },

      { id: 3, label: 'Node 1-2' }

    ]

  },

  {

    id: 4,

    label: 'Node 2',

    children: [

      { id: 5, label: 'Node 2-1' }

    ]

  }

];

步骤 2: 使用 <el-tree> 组件并获取选中数据

在你的 Vue 组件中,使用 <el-tree> 并设置 show-checkbox 以允许用户选择节点:

<template>

  <el-tree

    :data="treeData"

    show-checkbox

    node-key="id"

    ref="tree"

    @check-change="handleCheckChange"

  ></el-tree>

</template>

<script>

export default {

  data() {

    return {

      treeData: treeData // 从步骤1中定义的数据

    };

  },

  methods: {

    handleCheckChange(data, checked, node) {

      console.log(data, checked); // 处理选中状态变化

    }

  }

};

</script>

步骤 3: 重组选中数据为树结构或其它形式

当节点被选中时,你可以通过 ref 获取到 <el-tree> 组件的实例,并使用它的 getCheckedNodes 方法来获取所有选中的节点。然后,你可以根据这些选中的节点来重组数据。例如,你可以创建一个新的树结构只包含选中的节点:

methods: {

  handleCheckChange(data, checked) {

    if (checked) { // 只处理选中的节点

      const selectedNodes = this.$refs.tree.getCheckedNodes(); // 获取所有选中的节点

      const selectedTree = this.buildSelectedTree(selectedNodes); // 构建新的树结构

      console.log(selectedTree); // 输出或使用新的树结构

    }

  },

  buildSelectedTree(nodes) {

    // 根据选中的节点构建新的树结构,这里简单示例只保留label和id,实际可以根据需要调整结构

    return nodes.map(node => ({ id: node.id, label: node.label })); // 可以根据需要调整映射规则,例如包含children等

  }

}

注意点:

getCheckedNodes 方法默认返回所有选中的节点,包括半选节点。如果你只想要完全选中的节点(即叶子节点),可以使用 getCheckedNodes(false, true)。

根据你的具体需求调整 buildSelectedTree 方法中的逻辑,例如你可能需要递归处理以保持原有的父子关系。例如:

buildSelectedTree(nodes) {

  return nodes.map(node => ({ id: node.id, label: node.label, children: this.buildSelectedTree(node.children || []) })); // 递归处理子节点

}

通过以上步骤,你可以根据 <el-tree> 中选中的数据来重组树结构或者进行其他处理。