diff --git a/packages/core/src/Node.ts b/packages/core/src/Node.ts index b0aa65eb..0e2307b4 100644 --- a/packages/core/src/Node.ts +++ b/packages/core/src/Node.ts @@ -73,7 +73,11 @@ class Node extends EventEmitter { const { events, style } = data; this.events = events || []; this.style = style || {}; - this.instance.config = data; + try { + this.instance.config = data; + // eslint-disable-next-line @typescript-eslint/no-unused-vars + } catch (e: any) {} + this.emit('update-data', data); } @@ -81,6 +85,9 @@ class Node extends EventEmitter { this.eventQueue.push(event); } + /** + * @deprecated use setInstance instead + */ public registerMethod(methods: Methods) { if (!methods) { return; @@ -97,6 +104,10 @@ class Node extends EventEmitter { } } + public setInstance(instance: any) { + this.instance = instance; + } + public async runHookCode(hook: string, params?: Record) { if (typeof this.data[hook] === 'function') { // 兼容旧的数据格式 @@ -144,6 +155,10 @@ class Node extends EventEmitter { } public destroy() { + this.eventQueue.length = 0; + this.instance = null; + this.events = []; + this.style = {}; this.removeAllListeners(); } @@ -159,10 +174,7 @@ class Node extends EventEmitter { }); if (instance) { - this.registerMethod(instance); - if (instance.config) { - this.setData(instance.config); - } + this.setInstance(instance); } this.runHookCode('created'); @@ -171,10 +183,7 @@ class Node extends EventEmitter { this.once('mounted', (instance: any) => { const handler = async () => { if (instance) { - this.registerMethod(instance); - if (instance.config) { - this.setData(instance.config); - } + this.setInstance(instance); } for (let eventConfig = this.eventQueue.shift(); eventConfig; eventConfig = this.eventQueue.shift()) { diff --git a/packages/core/src/Page.ts b/packages/core/src/Page.ts index 51312ad9..7d873ee7 100644 --- a/packages/core/src/Page.ts +++ b/packages/core/src/Page.ts @@ -106,9 +106,16 @@ class Page extends Node { } public destroy(): void { - super.destroy(); + this.nodes.forEach((node) => { + if (node === this) { + return; + } + node.destroy(); + }); this.nodes.clear(); + + super.destroy(); } } diff --git a/vue-components/page/package.json b/vue-components/page/package.json index 0b43a87b..b44775cf 100644 --- a/vue-components/page/package.json +++ b/vue-components/page/package.json @@ -1,5 +1,5 @@ { - "version": "0.1.0", + "version": "0.1.1", "name": "@tmagic/vue-page", "type": "module", "main": "src/index.ts", diff --git a/vue-components/page/src/index.vue b/vue-components/page/src/index.vue index 297de777..33603878 100644 --- a/vue-components/page/src/index.vue +++ b/vue-components/page/src/index.vue @@ -73,7 +73,7 @@ export default defineComponent({ const node = useNode({ config: { ...config, [IS_DSL_NODE_KEY]: true } }, app); if (config.id !== preConfig?.id) { - node?.registerMethod({ refresh }); + node?.setInstance({ config: props.config, refresh }); node?.emit('created'); } await nextTick();