当前位置: 首页 > article >正文

Vue中el-tree结合vuedraggable实现跨组件元素拖拽

实现效果:

左侧el-tree:

<template>
    <el-tree
      class="filter-tree"
      :data="treeData"
      :props="defaultProps"
      :filter-node-method="filterNode"
      node-key="id"
      draggable
      :allow-drop="allowDrop"
      @node-drag-start="handleDragStart"
      @node-drag-end="handleDragEndz"
      ref="tree">
    </el-tree>
</template>
<script>
    data() {
        return {
            treeData:[],
            defaultProps: {
                children: 'children',
                label: 'datasetColumnName'
            },
        }
    },
    methods: {
        filterNode(value, data) {
            if (!value) return true;
            return data.datasetColumnName.indexOf(value) !== -1;
        },
        // 阻止el-tree默认拖拽
        allowDrop() {
            return false;
        },
        handleDragStart() {
            console.log(node.data)
            if(!node.data.aqlStr) return
            this.draggingItem = node.data
            this.isShowDragging = true
        },
        handleDragEndz() {
            this.isShowDragging = false
        },
    }
</script>

右侧vuedraggable接收,先npm install vuedraggable,main.js中引入:

import draggable from 'vuedraggable';

Vue.use(draggable)

使用如下:

<draggable v-model="dragList" class="drag_list" :class="{ 'hint': isShowDragging?true:false }" animation="1000"  group="items" @dragover="handleDragOver" @drop="handleTargetDrop($event)">
    <div class="add_tip" v-if="dragList.length <= 0">
        <i class="el-icon-plus"></i>
    </div>
    <template v-else v-for="(item, index) in dragList" :key="index">
        其他代码
    </template>
</draggable>
<script>
    export default {
        data() {
            return {}
        },
        methods: {
            handleDragOver(e) {
                e.preventDefault();
            },
            handleTargetDrop(e, index) {
                e.preventDefault();
                // 阻止冒泡
                e.stopPropagation();
                // 将el-tree选中的数据放入dragList中
                this.dragList.push(this.draggingItem)
                // 刷新页面
                this.$forceUpdate()
            }
        }
    
    }
</script>

文章参考:

https://blog.csdn.net/Turn_to_empty/article/details/126759544


http://www.kler.cn/a/501522.html

相关文章:

  • 浅谈计算机网络01 | 计算机网络数据平面
  • esp32在编译是报错在idf中有该文件,但是说没有
  • idea快捷键
  • qt-C++笔记之自定义继承类初始化时涉及到parents的初始化
  • Git | git revert命令详解
  • 前端开发:form中的标签
  • CentOS 7.9 通过 yum 安装 Docker
  • 走进 Web3 社交:打破边界,重构人际关系网络
  • 语音技术与人工智能:智能语音交互的多场景应用探索
  • 微信小程序-Docker+Nginx环境配置业务域名验证文件
  • 合洁科技电子洁净工程公司分享晶圆厂百级净化车间建设的关键要点
  • 【C++多线程编程:六种锁】
  • 工作效率提升:使用Anaconda Prompt 创建虚拟环境总结
  • 基于Auto-Editor一键预处理音视频无声片段
  • 从零玩转CanMV-K230(9)-Timer、RTC、ADC、WDT、File
  • 介绍下不同语言的异常处理机制
  • Apache Hadoop YARN框架概述
  • 大模型LLM-Prompt-CRISPE
  • 文章题目:利用Adobe Flash Player漏洞:一次针对Windows XP的渗透测试实验
  • leetcode:1784. 检查二进制字符串字段(python3解法)
  • 贪心算法(五)
  • Node.js - 模块化与包管理工具
  • 苹果手机(IOS系统)出现安全延迟进行中如何关闭?
  • C#调用OpenCvSharp实现图像的膨胀和腐蚀
  • JavaScript动态渲染页面爬取之Splash
  • web前端第五次作业---制作菜单