
本节的主要内容是给三级分类树形结构加上拖拽功能,并且根据分类不能大于三级的规则判断是否能拖拽。
el-tree控件加上允许拖拽的属性draggable,此外还需要根据层级判断是否能拖动,通过给allow-drop绑定事件allowDrag实现这个需求。
	allowDrag(draggingNode, dropNode, dropPosition) {       console.log(draggingNode, dropNode, dropPosition);       return true     }, 在 Element UI(El-UI)的树组件 el-tree 中,allow-drop 事件是一个自定义槽函数,用于控制是否允许将一个节点拖放到另一个节点上。这个函数接受三个参数,分别代表正在拖动的节点、可能的放置目标节点以及放置位置。这三个参数具体如下:
draggingNode:
 这个参数是 TreeNode 类型的对象,表示当前正在被拖动的节点。它包含了关于拖动节点的所有信息,如节点的数据、状态等。
dropNode:
 同样是 TreeNode 类型的对象,表示潜在的放置目标节点。这是你可能要将 draggingNode 放置到的节点。如果拖动过程中没有特定的放置目标(例如,拖动到树的空白区域),这个参数可能是 undefined 或者不适用。
dropPosition:
 表示相对于 dropNode 的放置位置。这是一个字符串,可以是 'before'、'after' 或 'inner',分别表示拖动的节点将放置在目标节点之前、之后或内部。如果 dropNode 是 undefined,则这个参数可能表示放置在树的顶部或底部。
allow-drop 函数应该返回一个布尔值,指示是否允许进行拖放操作。如果返回 true,则允许拖放;如果返回 false,则阻止拖放操作。例如,在你的代码中:
接下来实现这个函数的逻辑。
原则是当前拖动的阶段到达要放置的位置后,层级数不能超过3,所以核心有3点:
关于第②点,新位置的类型可能有三种:
①
递归统计draggingNode子树的深度。
	// 递归计算draggingNode子树的深度     countDraggingNodeDeep(draggingNode) {       var deep = 0;       if (draggingNode.childNodes && draggingNode.childNodes.length > 0) {         debugger         draggingNode.childNodes.forEach(child => {           deep = Math.max(deep, this.countDraggingNodeDeep(child));         });       }       return deep + 1;     }, ②
结合draggingNode子树的深度和位置判断是否能拖动。
	allowDrag(draggingNode, dropNode, dropPosition) {       console.log(draggingNode, dropNode, dropPosition);       var deep = this.countDraggingNodeDeep(draggingNode);        console.log(deep,  dropNode.data.catLevel + deep);        // 根据dropPosition结合dropNode.catLevel来判断draggingNode新位置的位置是否合法       if (dropPosition === "prev" || dropPosition === "next") {         return dropNode.data.catLevel + deep - 1 <= 3;       } else if (dropPosition === "inner" ) {         return dropNode.data.catLevel + deep <= 3;       }     },                         {{ node.label }}                     append(data)"           >             Append                        edit(data)"           >             Edit                        remove(node, data)"           >             Delete                                                                                                                                      取 消          确 定                      
                    上一篇:小米6x稳定版系统下载