@@ -60,12 +60,12 @@ export async function renderAngular(
6060 serverContext : string ,
6161) : Promise < { hasNavigationError : boolean ; redirectTo ?: string ; content : ( ) => Promise < string > } > {
6262 // A request to `http://www.example.com/page/index.html` will render the Angular route corresponding to `http://www.example.com/page`.
63- const urlToRender = stripIndexHtmlFromURL ( url ) . toString ( ) ;
63+ const urlToRender = stripIndexHtmlFromURL ( url ) ;
6464 const platformRef = platformServer ( [
6565 {
6666 provide : INITIAL_CONFIG ,
6767 useValue : {
68- url : urlToRender ,
68+ url : urlToRender . toString ( ) ,
6969 document : html ,
7070 } ,
7171 } ,
@@ -96,31 +96,29 @@ export async function renderAngular(
9696 applicationRef = await bootstrap ( { platformRef } ) ;
9797 }
9898
99- const envInjector = applicationRef . injector ;
100- const router = envInjector . get ( Router ) ;
101- const initialUrl = router . currentNavigation ( ) ?. initialUrl . toString ( ) ;
102-
10399 // Block until application is stable.
104100 await applicationRef . whenStable ( ) ;
105101
106102 // TODO(alanagius): Find a way to avoid rendering here especially for redirects as any output will be discarded.
103+ const envInjector = applicationRef . injector ;
107104 const routerIsProvided = ! ! envInjector . get ( ActivatedRoute , null ) ;
105+ const router = envInjector . get ( Router ) ;
108106 const lastSuccessfulNavigation = router . lastSuccessfulNavigation ( ) ;
109107
110108 if ( ! routerIsProvided ) {
111109 hasNavigationError = false ;
112- } else if ( lastSuccessfulNavigation ?. finalUrl && initialUrl !== null ) {
110+ } else if ( lastSuccessfulNavigation ?. finalUrl ) {
113111 hasNavigationError = false ;
114112
115- const { finalUrl } = lastSuccessfulNavigation ;
116- const finalUrlStringified = finalUrl . toString ( ) ;
117-
118- if ( initialUrl !== finalUrlStringified ) {
119- const baseHref =
120- envInjector . get ( APP_BASE_HREF , null , { optional : true } ) ??
121- envInjector . get ( PlatformLocation ) . getBaseHrefFromDOM ( ) ;
113+ const baseHref =
114+ envInjector . get ( APP_BASE_HREF , null , { optional : true } ) ??
115+ envInjector . get ( PlatformLocation ) . getBaseHrefFromDOM ( ) ;
116+ const finalUrlStringified = lastSuccessfulNavigation . finalUrl . toString ( ) ;
117+ const finalUrlWithBaseHref = joinUrlParts ( baseHref , finalUrlStringified ) ;
118+ const initialUrl = `${ urlToRender . pathname } ${ urlToRender . search } ${ urlToRender . hash } ` ;
122119
123- redirectTo = joinUrlParts ( baseHref , finalUrlStringified ) ;
120+ if ( initialUrl !== finalUrlWithBaseHref ) {
121+ redirectTo = finalUrlWithBaseHref ;
124122 }
125123 }
126124
0 commit comments