javascript - 从一棵树到另一棵树的Vue可拖动树节点

标签 javascript css vue.js treeview draggable

我有2个vue可拖动树( TreeA TreeB )。我想将 TreeNodeA TreeA 拖到 TreeB 。也像 TreeB TreeNodeB TreeA 那样。
更新
最重要的特性之一就是树就像static structure一样。如果我拖动一个节点(this is a product),则必须将only product拖动到一个节点内。 不是完整节点。我的意思是我的树是静态的。我只想在节点内拖动product
那可能吗。有任何想法吗?
有人可以帮我吗?
有人这样尝试过谁?

最佳答案

终于我解决了。这是我的代码

 var Main = {
  data() {
    return {
      treeData1: [{
        id: 1,
        label: "Item 1",
        children: [{
          id: 4,
          label: "Item 1 Child 1",
          children: [{id: 9,label: "Item 1 Grand Child 1"},
                    {id: 9,label: "Item 1 Grand Child 1"}]
        }],
      }],
      treeData2: [{
        id: 2,
        label: "Item 2",
        children: [{
          id: 5,
          label: "Item 2 Child 1",
          children: [{id: 8,label: "Item 2 Grand Child 1"}],
        }],
      }],
    };
  },
  methods: {
    handleDragstart (node, event) {
      this.$refs.tree2.$emit('tree-node-drag-start', event, {node: node});
    },
    handleDragend (draggingNode, endNode, position, event) {
      
      let emptyData = {id: (+new Date), children: []};
      this.$refs.tree1.insertBefore(emptyData, draggingNode);

      this.$refs.tree2.$emit('tree-node-drag-end', event);
      this.$nextTick(() => {
        
        if (this.$refs.tree1.getNode(draggingNode.data)) {
          this.$refs.tree1.remove(emptyData);
        } else {
          
          let data = JSON.parse(JSON.stringify(draggingNode.data));
          this.$refs.tree1.insertAfter(data, this.$refs.tree1.getNode(emptyData));
          this.$refs.tree1.remove(emptyData);
        }
      })
    },
    returnTrue () {
      return true;
    },
    returnFalse () {
      return false;
    }
  }
}
var Ctor = Vue.extend(Main)
new Ctor().$mount('#app')
.tree {
  display: inline-block;
  vertical-align: top;
  width: 180px;
  margin-left: 10px;
  height: 300px;
  border: 1px solid blue;
}
<script src="//unpkg.com/vue/dist/vue.js"></script>
<script src="//unpkg.com/element-ui/lib/index.js"></script>
<div id="app">
  <div class="tree-drag">
    <el-tree
      :data="treeData1"
      ref="tree1"
      class="tree" 
      node-key="id"
      draggable
      default-expand-all
      :allow-drop="returnFalse"
      @node-drag-start="handleDragstart"
      @node-drag-end="handleDragend"
    ></el-tree>
    
    <el-tree
      :data="treeData2" 
      ref="tree2"
      class="tree" 
      node-key="id"
      draggable
      default-expand-all
      :allow-drop="returnTrue"
    ></el-tree>
  </div>
</div>

关于javascript - 从一棵树到另一棵树的Vue可拖动树节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64629413/

相关文章:

javascript - 如何定义javascript执行顺序

jquery - 根据按钮的属性值添加/删除 css 类

node.js - 如何从 Nodejs 应用程序连接到 Heroku 上的 PostgresQL?

javascript - 传单 - 缩放时绑定(bind)到标记的标签并不总是位于同一位置

javascript - 登录的用户是特定 View 上的 AnonymousUser

javascript - 返回函数内的 setInterval 不起作用

html - 将 CSS 添加到父元素

html - 如何创建两个 <div>,其中一个占据最大宽度

javascript - Vue.js + Express : Cannot get . Prevent/e.preventDefault() 可以工作吗?

vue.js - Vue 组合 API 中的只读目标