拖拽树形节点到子节点时层级结构变乱怎么办?
在做部门管理树形结构拖拽时,遇到拖拽父节点到子节点位置,保存后的数据层级完全错乱。我用Vue3+Sortable.js实现,设置了group和animation,拖拽时视觉显示没问题,但更新数据时发现目标节点的children数组被错误挂载到顶层。尝试过用onAdd监听事件手动处理,但遇到TypeError: Cannot read properties of undefined (reading 'children')。
代码大概是这样写的:
onAdd(rootEvent) {
const { item, target } = rootEvent;
const parent = target.parentNode; // 这里可能拿错了父节点
this.updateTree(parent.id, item.id); // 更新父子关系时出错
}
调试发现当拖到叶子节点时,target.parentNode会变成同级元素,该怎么准确获取目标节点的父级?
这里的关键是用数据驱动,别直接操作 DOM。先通过唯一标识找到对应的节点,然后在数据结构上重新挂载。记得给每个节点加个唯一的 id,比如
data-id属性。这个方法能保证层级关系不出错,调试也简单。