diff --git a/packages/designer/src/document/document-model.ts b/packages/designer/src/document/document-model.ts index 1c6a5590f..13cde0e05 100644 --- a/packages/designer/src/document/document-model.ts +++ b/packages/designer/src/document/document-model.ts @@ -33,7 +33,7 @@ export class DocumentModel { /** * 根节点 类型有:Page/Component/Block */ - readonly rootNode: RootNode; + rootNode: RootNode | null; /** * 文档编号 */ @@ -461,12 +461,16 @@ export class DocumentModel { * 从项目中移除 */ remove() { + this.purge(); this.project.removeDocument(this); - // todo: ... + this.designer.postEvent('document.remove', { id: this.id }); } purge() { - // todo: + this.rootNode?.purge(); + this.nodes.clear(); + this._nodesMap.clear(); + this.rootNode = null; } checkNesting(dropTarget: ParentalNode, dragObject: DragNodeObject | DragNodeDataObject): boolean { diff --git a/packages/designer/src/document/node/node.ts b/packages/designer/src/document/node/node.ts index 384b445e3..c69f780d5 100644 --- a/packages/designer/src/document/node/node.ts +++ b/packages/designer/src/document/node/node.ts @@ -679,7 +679,7 @@ export class Node { /** * 删除一个节点 - * @param node + * @param node */ removeChild(node: Node) { this.children?.delete(node); @@ -699,11 +699,11 @@ export class Node { if (this.purged) { return; } - if (this._parent) { - // should remove thisNode before purge - this.remove(useMutator); - return; - } + // if (this._parent) { + // // should remove thisNode before purge + // this.remove(useMutator); + // return; + // } this.purged = true; if (this.isParental()) { this.children.purge(useMutator); @@ -711,8 +711,8 @@ export class Node { this.autoruns?.forEach((dispose) => dispose()); this.props.purge(); this.document.internalRemoveAndPurgeNode(this); - this.document.destroyNode(this); + this.remove(useMutator); } /** @@ -862,7 +862,7 @@ export class Node { if (this.parent) { return this.parent.getSuitablePlace(node, ref); } - + return null; } /** diff --git a/packages/plugin-outline-pane/src/tree-master.ts b/packages/plugin-outline-pane/src/tree-master.ts index b89f116a2..326451958 100644 --- a/packages/plugin-outline-pane/src/tree-master.ts +++ b/packages/plugin-outline-pane/src/tree-master.ts @@ -54,6 +54,9 @@ export class TreeMaster { time: (endTime - startTime).toFixed(2), }); }); + designer.editor.on('designer.document.remove', ({ id }) => { + this.treeMap.delete(id); + }); } private toVision() {