diff --git a/packages/core/src/hydration/i18n.ts b/packages/core/src/hydration/i18n.ts index 68e66e5216f..1f0257cfafa 100644 --- a/packages/core/src/hydration/i18n.ts +++ b/packages/core/src/hydration/i18n.ts @@ -26,6 +26,7 @@ import {IS_I18N_HYDRATION_ENABLED} from './tokens'; import { getNgContainerSize, initDisconnectedNodes, + isDisconnectedNode, isSerializedElementContainer, processTextNodeBeforeSerialization, } from './utils'; @@ -407,15 +408,17 @@ function prepareI18nBlockForHydrationImpl( parentTNode: TNode | null, subTemplateIndex: number, ) { - if ( - !isI18nHydrationSupportEnabled() || - (parentTNode && isI18nInSkipHydrationBlock(parentTNode)) - ) { + const hydrationInfo = lView[HYDRATION]; + if (!hydrationInfo) { return; } - const hydrationInfo = lView[HYDRATION]; - if (!hydrationInfo) { + if ( + !isI18nHydrationSupportEnabled() || + (parentTNode && + (isI18nInSkipHydrationBlock(parentTNode) || + isDisconnectedNode(hydrationInfo, parentTNode.index - HEADER_OFFSET))) + ) { return; } diff --git a/packages/core/src/render3/instructions/element_container.ts b/packages/core/src/render3/instructions/element_container.ts index a3f071d05e6..b46343216c7 100644 --- a/packages/core/src/render3/instructions/element_container.ts +++ b/packages/core/src/render3/instructions/element_container.ts @@ -9,6 +9,7 @@ import {validateMatchingNode, validateNodeExists} from '../../hydration/error_ha import {locateNextRNode, siblingAfter} from '../../hydration/node_lookup_utils'; import { getNgContainerSize, + isDisconnectedNode, markRNodeAsClaimedByHydration, setSegmentHead, } from '../../hydration/utils'; @@ -204,7 +205,11 @@ function locateOrCreateElementContainerNode( ): RComment { let comment: RComment; const hydrationInfo = lView[HYDRATION]; - const isNodeCreationMode = !hydrationInfo || isInSkipHydrationBlock() || isDetachedByI18n(tNode); + const isNodeCreationMode = + !hydrationInfo || + isInSkipHydrationBlock() || + isDisconnectedNode(hydrationInfo, index) || + isDetachedByI18n(tNode); lastNodeWasCreated(isNodeCreationMode); diff --git a/packages/platform-server/test/hydration_spec.ts b/packages/platform-server/test/hydration_spec.ts index 1e16ae7f8cd..872aacf3e4e 100644 --- a/packages/platform-server/test/hydration_spec.ts +++ b/packages/platform-server/test/hydration_spec.ts @@ -2128,6 +2128,54 @@ describe('platform-server hydration integration', () => { expect(content.innerHTML).toBe('two