From 87eccc298cdd9216f59b138deafec8be72473e0b Mon Sep 17 00:00:00 2001 From: wanglin2 <1013335014@qq.com> Date: Fri, 13 Oct 2023 17:30:21 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BB=A3=E7=A0=81=E4=BC=98=E5=8C=96=EF=BC=9A?= =?UTF-8?q?=E5=88=A0=E9=99=A4=E8=8A=82=E7=82=B9=E6=97=B6=E6=97=A0=E9=9C=80?= =?UTF-8?q?=E8=B0=83=E7=94=A8=E8=8A=82=E7=82=B9=E7=9A=84=E5=88=A0=E9=99=A4?= =?UTF-8?q?=E6=96=B9=E6=B3=95=EF=BC=8C=E5=8F=AA=E9=9C=80=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=E8=8A=82=E7=82=B9=E7=9A=84nodeData.data=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E5=8D=B3=E5=8F=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- simple-mind-map/src/core/render/Render.js | 26 ++++++++--------------- simple-mind-map/src/utils/index.js | 17 +++++++-------- 2 files changed, 17 insertions(+), 26 deletions(-) diff --git a/simple-mind-map/src/core/render/Render.js b/simple-mind-map/src/core/render/Render.js index c0072a3b..c984757b 100644 --- a/simple-mind-map/src/core/render/Render.js +++ b/simple-mind-map/src/core/render/Render.js @@ -18,7 +18,7 @@ import { addDataToAppointNodes, createUidForAppointNodes, formatDataToArray, - getNodeIndex, + removeFromParentNodeData, createUid, getNodeDataIndex, getNodeIndexInNodeList, @@ -972,9 +972,6 @@ class Render { }) if (root) { this.clearActiveNodeList() - root.children.forEach(child => { - child.remove() - }) root.children = [] root.nodeData.children = [] } else { @@ -997,7 +994,7 @@ class Render { i-- } else { this.removeNodeFromActiveList(node) - this.removeOneNode(node) + removeFromParentNodeData(node) i-- } } @@ -1086,14 +1083,6 @@ class Render { return needActiveNode } - // 移除某个指定节点 - removeOneNode(node) { - let index = getNodeIndex(node) - node.remove() - node.parent.children.splice(index, 1) - node.parent.nodeData.children.splice(index, 1) - } - // 复制节点 copyNode() { if (this.activeNodeList.length <= 0) { @@ -1110,19 +1099,22 @@ class Render { if (this.activeNodeList.length <= 0) { return } + // 找出激活节点中的顶层节点列表,并过滤掉根节点 const nodeList = getTopAncestorsFomNodeList(this.activeNodeList).filter( node => { return !node.isRoot } ) + // 复制数据 const copyData = nodeList.map(node => { return copyNodeTree({}, node, true) }) + // 从父节点的数据中移除 nodeList.forEach(node => { - this.removeNodeFromActiveList(node) - this.removeOneNode(node) + removeFromParentNodeData(node) }) - this.mindMap.emit('node_active', null, [...this.activeNodeList]) + // 清空激活节点列表 + this.clearActiveNodeList() this.mindMap.render() if (callback && typeof callback === 'function') { callback(copyData) @@ -1138,7 +1130,7 @@ class Render { nodeList.forEach(item => { this.checkNodeLayerChange(item, toNode) this.removeNodeFromActiveList(item) - this.removeOneNode(item) + removeFromParentNodeData(item) toNode.nodeData.children.push(item.nodeData) }) this.mindMap.emit('node_active', null, [...this.activeNodeList]) diff --git a/simple-mind-map/src/utils/index.js b/simple-mind-map/src/utils/index.js index d3d5b14d..984d01c2 100644 --- a/simple-mind-map/src/utils/index.js +++ b/simple-mind-map/src/utils/index.js @@ -795,15 +795,6 @@ export const formatDataToArray = data => { return Array.isArray(data) ? data : [data] } -// 获取节点在同级里的位置索引 -export const getNodeIndex = node => { - return node.parent - ? node.parent.children.findIndex(item => { - return item.uid === node.uid - }) - : 0 -} - // 获取节点在同级里的位置索引 export const getNodeDataIndex = node => { return node.parent @@ -922,3 +913,11 @@ export const getDataFromClipboard = async () => { img } } + +// 从节点的父节点的nodeData.children列表中移除该节点的数据 +export const removeFromParentNodeData = node => { + if (!node || !node.parent) return + const index = getNodeDataIndex(node) + if (index === -1) return + node.parent.nodeData.children.splice(index, 1) +}