From 45a20d9405900c62dfc1c3b82612c69c409da373 Mon Sep 17 00:00:00 2001 From: roymondchen Date: Tue, 6 Dec 2022 20:32:06 +0800 Subject: [PATCH] =?UTF-8?q?fix(editor):=20services=E5=9C=A8=E7=BB=84?= =?UTF-8?q?=E4=BB=B6unmounted=E6=97=B6=E5=8F=AA=E9=87=8D=E7=BD=AE=E7=8A=B6?= =?UTF-8?q?=E6=80=81=E4=B8=8D=E7=A7=BB=E9=99=A4=E4=BA=8B=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/editor/src/Editor.vue | 13 ++++++------- packages/editor/src/services/codeBlock.ts | 8 +++++++- packages/editor/src/services/componentList.ts | 7 ++++++- packages/editor/src/services/editor.ts | 11 ++++++++--- packages/editor/src/services/events.ts | 7 ++++++- packages/editor/src/services/history.ts | 5 +++-- packages/editor/src/services/props.ts | 7 ++++++- packages/editor/src/services/storage.ts | 1 + packages/editor/src/services/ui.ts | 12 ++++++++++++ 9 files changed, 55 insertions(+), 16 deletions(-) diff --git a/packages/editor/src/Editor.vue b/packages/editor/src/Editor.vue index c1ac2e96..96dba8c2 100644 --- a/packages/editor/src/Editor.vue +++ b/packages/editor/src/Editor.vue @@ -316,13 +316,12 @@ export default defineComponent({ ); onUnmounted(() => { - editorService.destroy(); - historyService.destroy(); - propsService.destroy(); - uiService.destroy(); - componentListService.destroy(); - storageService.destroy(); - codeBlockService.destroy(); + editorService.resetState(); + historyService.resetState(); + propsService.resetState(); + uiService.resetState(); + componentListService.resetState(); + codeBlockService.resetState(); }); const services: Services = { diff --git a/packages/editor/src/services/codeBlock.ts b/packages/editor/src/services/codeBlock.ts index 2f40446c..79f50896 100644 --- a/packages/editor/src/services/codeBlock.ts +++ b/packages/editor/src/services/codeBlock.ts @@ -344,7 +344,7 @@ class CodeBlock extends BaseService { this.setCodeDsl(codeDsl); } - public destroy(): void { + public resetState() { this.state.isShowCodeEditor = false; this.state.codeDsl = null; this.state.id = ''; @@ -354,6 +354,12 @@ class CodeBlock extends BaseService { this.state.undeletableList = []; } + public destroy(): void { + this.resetState(); + this.removeAllListeners(); + this.removeAllPlugins(); + } + /** * 删除组件时 如果是容器 需要遍历删除其包含节点的绑定信息 * @param {MNode} node 节点信息 diff --git a/packages/editor/src/services/componentList.ts b/packages/editor/src/services/componentList.ts index 6c7790f9..566654b6 100644 --- a/packages/editor/src/services/componentList.ts +++ b/packages/editor/src/services/componentList.ts @@ -42,9 +42,14 @@ class ComponentList extends BaseService { return this.state.list; } - public destroy() { + public resetState() { this.state.list = []; + } + + public destroy() { + this.resetState(); this.removeAllListeners(); + this.removeAllPlugins(); } } diff --git a/packages/editor/src/services/editor.ts b/packages/editor/src/services/editor.ts index 0987f997..2f1d3e71 100644 --- a/packages/editor/src/services/editor.ts +++ b/packages/editor/src/services/editor.ts @@ -207,7 +207,7 @@ class Editor extends BaseService { if (page) { historyService.changePage(toRaw(page)); } else { - historyService.empty(); + historyService.resetState(); } if (node?.id) { @@ -762,8 +762,7 @@ class Editor extends BaseService { }); } - public destroy() { - this.removeAllListeners(); + public resetState() { this.set('root', null); this.set('node', null); this.set('nodes', []); @@ -775,6 +774,12 @@ class Editor extends BaseService { this.set('pageLength', new Map()); } + public destroy() { + this.removeAllListeners(); + this.resetState(); + this.removeAllPlugins(); + } + public resetModifiedNodeId() { this.get>('modifiedNodeIds').clear(); } diff --git a/packages/editor/src/services/events.ts b/packages/editor/src/services/events.ts index 73f1672c..dc517cd1 100644 --- a/packages/editor/src/services/events.ts +++ b/packages/editor/src/services/events.ts @@ -76,10 +76,15 @@ class Events extends BaseService { return cloneDeep(methodMap[type] || DEFAULT_METHODS); } - public destroy() { + public resetState() { eventMap = reactive({}); methodMap = reactive({}); + } + + public destroy() { + this.resetState(); this.removeAllListeners(); + this.removeAllPlugins(); } } diff --git a/packages/editor/src/services/history.ts b/packages/editor/src/services/history.ts index 901f020c..ed8d9063 100644 --- a/packages/editor/src/services/history.ts +++ b/packages/editor/src/services/history.ts @@ -68,7 +68,7 @@ class History extends BaseService { this.emit('page-change', this.state.pageSteps[this.state.pageId]); } - public empty(): void { + public resetState(): void { this.state.pageId = undefined; this.state.pageSteps = {}; this.state.canRedo = false; @@ -100,8 +100,9 @@ class History extends BaseService { } public destroy(): void { - this.empty(); + this.resetState(); this.removeAllListeners(); + this.removeAllPlugins(); } private getUndoRedo() { diff --git a/packages/editor/src/services/props.ts b/packages/editor/src/services/props.ts index 1353872c..42df54ad 100644 --- a/packages/editor/src/services/props.ts +++ b/packages/editor/src/services/props.ts @@ -171,10 +171,15 @@ class Props extends BaseService { }; } - public destroy() { + public resetState() { this.state.propsConfigMap = {}; this.state.propsValueMap = {}; + } + + public destroy() { + this.resetState(); this.removeAllListeners(); + this.removeAllPlugins(); } /** diff --git a/packages/editor/src/services/storage.ts b/packages/editor/src/services/storage.ts index 881bbbfb..8dab5390 100644 --- a/packages/editor/src/services/storage.ts +++ b/packages/editor/src/services/storage.ts @@ -109,6 +109,7 @@ export class WebStorage extends BaseService { public destroy() { this.removeAllListeners(); + this.removeAllPlugins(); } private getValueAndProtocol(value: string | null) { diff --git a/packages/editor/src/services/ui.ts b/packages/editor/src/services/ui.ts index 2259f435..a63bb17f 100644 --- a/packages/editor/src/services/ui.ts +++ b/packages/editor/src/services/ui.ts @@ -97,8 +97,20 @@ class Ui extends BaseService { return Math.min((width - 60) / stageWidth || 1, (height - 80) / stageHeight || 1); } + public resetState() { + this.set('showSrc', false); + this.set('uiSelectMode', false); + this.set('zoom', 1); + this.set('stageContainerRect', { + width: 0, + height: 0, + }); + } + public destroy() { + this.resetState(); this.removeAllListeners(); + this.removeAllPlugins(); } private async setStageRect(value: StageRect) {