el-tree 拖拽到目标区域并传递数据

这篇博客展示了如何在 Vue.js 应用中使用 Element UI 的 el-tree 组件实现拖放功能。代码示例详细解释了如何处理节点拖动开始、允许拖放以及在主区域进行放置操作的逻辑。通过这种方式,可以方便地对树形结构数据进行动态排序。
摘要由CSDN通过智能技术生成
<template>
  <div class="container">
    <aside>
      <el-tree
        :data="data"
        node-key="id"
        default-expand-all
        @node-drag-start="handleDragStart"
        draggable
        :allow-drop="allowDrop"
        :allow-drag="allowDrag"
      ></el-tree>
    </aside>
    <main @drop="drop"  @dragover.prevent>
      <ul>
        <li
          v-for="(item,index) in rightList"
          :key="index"
        >{{item.label}}</li>
      </ul>
    </main>
  </div>
</template>
<script>
export default {
  data() {
    return {
      data: [
        {
          id: 1,
          label: "一级 1",
          children: [
            {
              id: 4,
              label: "二级 1-1",
              children: [
                {
                  id: 9,
                  label: "三级 1-1-1"
                },
                {
                  id: 10,
                  label: "三级 1-1-2"
                }
              ]
            }
          ]
        },
        {
          id: 2,
          label: "一级 2",
          children: [
            {
              id: 5,
              label: "二级 2-1"
            },
            {
              id: 6,
              label: "二级 2-2"
            }
          ]
        },
        {
          id: 3,
          label: "一级 3",
          children: [
            {
              id: 7,
              label: "二级 3-1"
            },
            {
              id: 8,
              label: "二级 3-2",
              children: [
                {
                  id: 11,
                  label: "三级 3-2-1"
                },
                {
                  id: 12,
                  label: "三级 3-2-2"
                },
                {
                  id: 13,
                  label: "三级 3-2-3"
                }
              ]
            }
          ]
        }
      ],
      rightList: [],
      defaultProps: {
        children: "children",
        label: "label"
      }
    };
  },
  methods: {
    handleDragStart(node, ev) {
      ev.dataTransfer.setData("item", JSON.stringify(node.data));
    },
    allowDrop(draggingNode, dropNode, type) {
      return false;
    },
    allowDrag(draggingNode) {
      return true;
    },
    drop(event) {
      let data = event.dataTransfer.getData("item");
      this.rightList.push(JSON.parse(data))
    //   console.log('this.rightList:', this.rightList)
    }
  }
};
</script>

<style scoped>
*{
    margin: 0;
    padding: 0;
}
.container {
  display: flex;
  height: 500px;
  overflow: auto;
}

.container > aside {
  width: 300px;
  height: 100%;
  border: 1px solid royalblue;
}

.container > main {
  flex: 1;
  height: 100%;
  border: 1px solid red;
}
</style>

大佬的文章,解决了遇到的拖拽问题,特此记录。

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值