vue2,使用el-tree组件,实现一个同级上下移动的功能的demo
时间: 2024-05-11 11:19:52 浏览: 129
Vue实现table上下移动功能示例
可以通过修改数据来实现同级上下移动的功能。
首先,需要监听el-tree的node-drop事件,该事件会在拖动节点到目标节点后触发,可以获取到拖动节点和目标节点的信息。根据这些信息,可以修改数据来实现节点的移动。
下面是一个简单的实现demo:
```html
<template>
<el-tree
:data="data"
:props="defaultProps"
@node-drop="handleNodeDrop"
></el-tree>
</template>
<script>
export default {
data() {
return {
data: [
{
label: '一级 1',
children: [
{
label: '二级 1-1'
},
{
label: '二级 1-2'
}
]
},
{
label: '一级 2',
children: [
{
label: '二级 2-1'
},
{
label: '二级 2-2'
}
]
}
],
defaultProps: {
children: 'children',
label: 'label'
}
}
},
methods: {
handleNodeDrop(draggingNode, dropNode, dropType) {
// 获取拖动节点的父节点
const draggingNodeParent = draggingNode.parent;
// 获取拖动节点在父节点中的位置
const draggingNodeIndex = draggingNodeParent.data.indexOf(draggingNode.data);
// 获取目标节点的父节点
const dropNodeParent = dropNode.parent;
// 获取目标节点在父节点中的位置
const dropNodeIndex = dropNodeParent.data.indexOf(dropNode.data);
// 判断拖动节点和目标节点是否在同一级别
if (draggingNodeParent === dropNodeParent) {
// 在同一级别内,交换位置即可
draggingNodeParent.data.splice(draggingNodeIndex, 1);
draggingNodeParent.data.splice(dropNodeIndex, 0, draggingNode.data);
} else {
// 不在同一级别内,需要将拖动节点从原父节点中删除,然后添加到目标父节点中
draggingNodeParent.data.splice(draggingNodeIndex, 1);
dropNodeParent.data.splice(dropNodeIndex, 0, draggingNode.data);
}
}
}
}
</script>
```
在该demo中,我们监听了el-tree的node-drop事件,然后在事件处理函数中,根据拖动节点和目标节点的信息来修改数据。具体来说,我们获取了拖动节点和目标节点的父节点以及在父节点中的位置,然后判断它们是否在同一级别内,如果是,则直接交换位置即可;否则,需要将拖动节点从原父节点中删除,然后添加到目标父节点中。
这样就实现了一个简单的同级上下移动的功能。
阅读全文