diff --git a/packages/canvas/render/src/RenderMain.ts b/packages/canvas/render/src/RenderMain.ts index e46e2252a..ff6a4e303 100644 --- a/packages/canvas/render/src/RenderMain.ts +++ b/packages/canvas/render/src/RenderMain.ts @@ -10,7 +10,7 @@ * */ -import { provide, watch, defineComponent, PropType, ref, inject, onUnmounted } from 'vue' +import { provide, watch, defineComponent, PropType, ref, inject, onUnmounted, h, Ref } from 'vue' import { useBroadcastChannel } from '@vueuse/core' import { constants } from '@opentiny/tiny-engine-utils' @@ -22,7 +22,6 @@ import { IPageSchema, useContext, usePageContext, useSchema } from './page-block import { api, setCurrentApi } from './canvas-function/canvas-api' import { getPageAncestors } from './material-function/page-getter' import CanvasEmpty from './canvas-function/CanvasEmpty.vue' -import { h } from 'vue' import { setCurrentPage } from './canvas-function/page-switcher' const { BROADCAST_CHANNEL } = constants @@ -138,12 +137,14 @@ export default defineComponent({ setup(props) { const pageAncestors = (inject('page-ancestors') as Ref) || ref(null) const pageIdFromPath = getController().getBaseInfo().pageId - const pageContext = props.active || !pageIdFromPath ? activePageContext : usePageContext() + // 顶层使用activePageContext,区块和页面间切换不受影响(短期方案),因为页面的pageContext目前非响应式(仅刷新画布执行一次),无法动态切换激活态和非激活态 + const pageContext = props.active || props.entry ? activePageContext : usePageContext() provide('pageContext', pageContext) pageContext.setContextParent(props.parentContext) + // 顶层isPage的判断和pageId耦合了,短期先使得顶层和激活页共用pageId,后续需要增加pageContext.isPage pageContext.pageId = props.pageId || pageIdFromPath - pageContext.active = props.active || pageIdFromPath === pageContext.pageId + pageContext.active = props.active || !pageIdFromPath pageContext.setCssScopeId(props.cssScopeId || (props.entry ? null : `data-te-page-${pageContext.pageId}`)) if (props.entry) { provide('page-ancestors', pageAncestors) @@ -153,7 +154,7 @@ export default defineComponent({ const cancel = getController().addHistoryDataChangedCallback(() => { const pageIdFromPath = getController().getBaseInfo().pageId pageContext.pageId = props.pageId || pageIdFromPath - pageContext.active = props.active || pageIdFromPath === pageContext.pageId + pageContext.active = props.active || !pageIdFromPath getPageAncestors(pageContext.pageId).then((value) => { pageAncestors.value = value }) @@ -165,8 +166,14 @@ export default defineComponent({ let schema = activeSchema let setCurrentSchema - if (pageContext.pageId && !props.active) { - const { schema: inActiveSchema, setSchema: setInactiveSchema } = useSchema(pageContext, { + let setCurrentMethod = setMethods + if (pageContext.pageId && !props.active && !props.entry) { + // 注意顶层使用activeSchema和对应的api + const { + schema: inActiveSchema, + setSchema: setInactiveSchema, + setMethods: setInactiveMethods + } = useSchema(pageContext, { utils, bridge, stores, @@ -174,6 +181,7 @@ export default defineComponent({ }) schema = inActiveSchema setCurrentSchema = setInactiveSchema + setCurrentMethod = setInactiveMethods } provide('rootSchema', schema) @@ -190,35 +198,39 @@ export default defineComponent({ watch( () => schema.methods, (value) => { - setMethods(value, true) + setCurrentMethod(value, true) }, { deep: true } ) - watch( - [() => props.active, () => props.renderSchema], - ([active, renderSchema]) => { - if (active) { - setCurrentPage({ - pageId: pageContext.pageId, - schema: schema, - pageContext: pageContext - }) - } - if (!active && !props.entry) { - setCurrentSchema(renderSchema) + + if (!props.entry) { + watch( + [() => props.active, () => props.renderSchema], + ([active, renderSchema]) => { + if (active) { + setCurrentPage({ + pageId: pageContext.pageId, + schema: schema, + pageContext: pageContext + }) + } + if (!active && !props.entry) { + setCurrentSchema?.(renderSchema, props.pageId) + } + }, + { + immediate: true } - }, - { - immediate: true - } - ) + ) + } + const renderer = getRenderer() return () => pageAncestors.value === null ? h(CanvasEmpty, { placeholderText: '页面分析加载中' }) - : renderer(schema, refreshKey, props.entry, props.active, !!pageContext.pageId) + : renderer(schema, refreshKey, props.entry, pageContext.active, !!pageContext.pageId) } }) diff --git a/packages/canvas/render/src/builtin/CanvasRouterView.vue b/packages/canvas/render/src/builtin/CanvasRouterView.vue index ad0b3b728..2653c3d42 100644 --- a/packages/canvas/render/src/builtin/CanvasRouterView.vue +++ b/packages/canvas/render/src/builtin/CanvasRouterView.vue @@ -1,5 +1,5 @@