diff --git a/packages/animations/browser/src/render/transition_animation_engine.ts b/packages/animations/browser/src/render/transition_animation_engine.ts index d41d4f2cd7074..cb8741b37e5c7 100644 --- a/packages/animations/browser/src/render/transition_animation_engine.ts +++ b/packages/animations/browser/src/render/transition_animation_engine.ts @@ -666,7 +666,16 @@ export class TransitionAnimationEngine { // code does not contain any animation code in it, but it is // just being called so that the node is marked as being inserted if (namespaceId) { - this._fetchNamespace(namespaceId).insertNode(element, parent); + const ns = this._fetchNamespace(namespaceId); + // This if-statement is a workaround for router issue #21947. + // The router sometimes hits a race condition where while a route + // is being instantiated a new navigation arrives, triggering leave + // animation of DOM that has not been fully initialized, until this + // is resolved, we need to handle the scenario when DOM is not in a + // consistent state during the animation. + if (ns) { + ns.insertNode(element, parent); + } } // only *directives and host elements are inserted before