mirror of
https://github.com/Tencent/tmagic-editor.git
synced 2025-04-06 03:57:56 +08:00
fix(editor): model-value变化后需要重新生成依赖后再通知runtime更新
This commit is contained in:
parent
7a228b13e6
commit
f0f94d4fcc
@ -276,26 +276,6 @@ export const initServiceEvents = (
|
|||||||
};
|
};
|
||||||
|
|
||||||
const rootChangeHandler = async (value: MApp | null, preValue?: MApp | null) => {
|
const rootChangeHandler = async (value: MApp | null, preValue?: MApp | null) => {
|
||||||
const nodeId = editorService.get('node')?.id || props.defaultSelected;
|
|
||||||
let node;
|
|
||||||
if (nodeId) {
|
|
||||||
node = editorService.getNodeById(nodeId);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (node && node !== value) {
|
|
||||||
await editorService.select(node.id);
|
|
||||||
} else if (value?.items?.length) {
|
|
||||||
await editorService.select(value.items[0]);
|
|
||||||
} else if (value?.id) {
|
|
||||||
editorService.set('nodes', [value]);
|
|
||||||
editorService.set('parent', null);
|
|
||||||
editorService.set('page', null);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (toRaw(value) !== toRaw(preValue)) {
|
|
||||||
emit('update:modelValue', value);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!value) return;
|
if (!value) return;
|
||||||
|
|
||||||
value.codeBlocks = value.codeBlocks || {};
|
value.codeBlocks = value.codeBlocks || {};
|
||||||
@ -314,12 +294,32 @@ export const initServiceEvents = (
|
|||||||
initDataSourceDepTarget(ds);
|
initDataSourceDepTarget(ds);
|
||||||
});
|
});
|
||||||
|
|
||||||
if (value && Array.isArray(value.items)) {
|
if (Array.isArray(value.items)) {
|
||||||
depService.collect(value.items, true);
|
depService.collect(value.items, true);
|
||||||
} else {
|
} else {
|
||||||
depService.clear();
|
depService.clear();
|
||||||
delete value.dataSourceDeps;
|
delete value.dataSourceDeps;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const nodeId = editorService.get('node')?.id || props.defaultSelected;
|
||||||
|
let node;
|
||||||
|
if (nodeId) {
|
||||||
|
node = editorService.getNodeById(nodeId);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (node && node !== value) {
|
||||||
|
await editorService.select(node.id);
|
||||||
|
} else if (value.items?.length) {
|
||||||
|
await editorService.select(value.items[0]);
|
||||||
|
} else if (value.id) {
|
||||||
|
editorService.set('nodes', [value]);
|
||||||
|
editorService.set('parent', null);
|
||||||
|
editorService.set('page', null);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (toRaw(value) !== toRaw(preValue)) {
|
||||||
|
emit('update:modelValue', value);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
// 新增节点,收集依赖
|
// 新增节点,收集依赖
|
||||||
|
@ -33,7 +33,7 @@
|
|||||||
import { computed, inject, markRaw, nextTick, onMounted, onUnmounted, ref, toRaw, watch, watchEffect } from 'vue';
|
import { computed, inject, markRaw, nextTick, onMounted, onUnmounted, ref, toRaw, watch, watchEffect } from 'vue';
|
||||||
import { cloneDeep } from 'lodash-es';
|
import { cloneDeep } from 'lodash-es';
|
||||||
|
|
||||||
import type { MContainer } from '@tmagic/schema';
|
import type { MApp, MContainer } from '@tmagic/schema';
|
||||||
import StageCore, { calcValueByFontsize, getOffset, Runtime } from '@tmagic/stage';
|
import StageCore, { calcValueByFontsize, getOffset, Runtime } from '@tmagic/stage';
|
||||||
|
|
||||||
import ScrollViewer from '@editor/components/ScrollViewer.vue';
|
import ScrollViewer from '@editor/components/ScrollViewer.vue';
|
||||||
@ -105,12 +105,6 @@ watch(zoom, (zoom) => {
|
|||||||
stage.setZoom(zoom);
|
stage.setZoom(zoom);
|
||||||
});
|
});
|
||||||
|
|
||||||
watch(root, (root) => {
|
|
||||||
if (runtime && root) {
|
|
||||||
runtime.updateRootConfig?.(cloneDeep(toRaw(root)));
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
watch(page, (page) => {
|
watch(page, (page) => {
|
||||||
if (runtime && page) {
|
if (runtime && page) {
|
||||||
runtime.updatePageId?.(page.id);
|
runtime.updatePageId?.(page.id);
|
||||||
@ -120,6 +114,14 @@ watch(page, (page) => {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
const rootChangeHandler = (root: MApp) => {
|
||||||
|
if (runtime && root) {
|
||||||
|
runtime.updateRootConfig?.(cloneDeep(toRaw(root)));
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
services?.editorService.on('root-change', rootChangeHandler);
|
||||||
|
|
||||||
const resizeObserver = new ResizeObserver((entries) => {
|
const resizeObserver = new ResizeObserver((entries) => {
|
||||||
for (const { contentRect } of entries) {
|
for (const { contentRect } of entries) {
|
||||||
services?.uiService.set('stageContainerRect', {
|
services?.uiService.set('stageContainerRect', {
|
||||||
@ -141,6 +143,7 @@ onUnmounted(() => {
|
|||||||
resizeObserver.disconnect();
|
resizeObserver.disconnect();
|
||||||
services?.editorService.set('stage', null);
|
services?.editorService.set('stage', null);
|
||||||
services?.keybindingService.unregisteEl('stage');
|
services?.keybindingService.unregisteEl('stage');
|
||||||
|
services?.editorService.off('root-change', rootChangeHandler);
|
||||||
});
|
});
|
||||||
|
|
||||||
const parseDSL = getConfig('parseDSL');
|
const parseDSL = getConfig('parseDSL');
|
||||||
|
Loading…
x
Reference in New Issue
Block a user