From c2fc81eb4cb72882cc131f0d10173531dce4eaf0 Mon Sep 17 00:00:00 2001 From: Alan Agius <17563226+alan-agius4@users.noreply.github.com> Date: Fri, 7 Aug 2026 14:13:38 +0000 Subject: [PATCH] fix(@angular/ssr): do not throw when router provider is missing Safely retrieves the optional Router instance from the environment injector during SSR to avoid NullInjectorError when rendering non-routed applications. --- packages/angular/ssr/src/utils/ng.ts | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/packages/angular/ssr/src/utils/ng.ts b/packages/angular/ssr/src/utils/ng.ts index 55d054bd2387..147bdb2a30cc 100644 --- a/packages/angular/ssr/src/utils/ng.ts +++ b/packages/angular/ssr/src/utils/ng.ts @@ -34,8 +34,7 @@ import { addTrailingSlash, joinUrlParts, stripIndexHtmlFromURL, stripTrailingSla * - A function that returns a `Promise`, which resolves with the root application reference. */ export type AngularBootstrap = - | Type - | ((context: BootstrapContext) => Promise); + Type | ((context: BootstrapContext) => Promise); /** * Renders an Angular application or module to an HTML string. @@ -111,13 +110,13 @@ export async function renderAngular( // TODO(alanagius): Find a way to avoid rendering here especially for redirects as any output will be discarded. const envInjector = applicationRef.injector; - const routerIsProvided = !!envInjector.get(ActivatedRoute, null); - const router = envInjector.get(Router); - const lastSuccessfulNavigation = router.lastSuccessfulNavigation(); + const router = envInjector.get(Router, null, { optional: true }); + const routerIsProvided = router !== null && !!envInjector.get(ActivatedRoute, null); + const lastSuccessfulNavigation = router?.lastSuccessfulNavigation(); if (!routerIsProvided) { hasNavigationError = false; - } else if (lastSuccessfulNavigation?.finalUrl) { + } else if (router && lastSuccessfulNavigation?.finalUrl) { hasNavigationError = false; const requestPrefix =