diff --git a/packages/router/src/router.ts b/packages/router/src/router.ts index fdf385220e..248d06d0c2 100644 --- a/packages/router/src/router.ts +++ b/packages/router/src/router.ts @@ -555,6 +555,7 @@ export class Router { * way the next navigation will be coming from the current URL in the browser. */ this.rawUrlTree = t.rawUrl; + this.browserUrlTree = t.urlAfterRedirects; t.resolve(null); return EMPTY; } diff --git a/packages/router/test/integration.spec.ts b/packages/router/test/integration.spec.ts index e95386f18c..60082eb634 100644 --- a/packages/router/test/integration.spec.ts +++ b/packages/router/test/integration.spec.ts @@ -661,6 +661,33 @@ describe('Integration', () => { expect(location.path()).toEqual('/login'); }))); + it('should set browserUrlTree with urlUpdateStrategy="eagar" and false `shouldProcessUrl`', + fakeAsync(inject([Router, Location], (router: Router, location: Location) => { + const fixture = TestBed.createComponent(RootCmp); + advance(fixture); + + router.urlUpdateStrategy = 'eager'; + + router.resetConfig([ + {path: 'team/:id', component: SimpleCmp}, + {path: 'login', component: AbsoluteSimpleLinkCmp} + ]); + + router.navigateByUrl('/team/22'); + advance(fixture, 1); + + expect((router as any).browserUrlTree.toString()).toBe('/team/22'); + + // Force to not process URL changes + router.urlHandlingStrategy.shouldProcessUrl = (url: UrlTree) => false; + + router.navigateByUrl('/login'); + advance(fixture, 1); + + // Because we now can't process any URL, we will end up back at the root. + expect((router as any).browserUrlTree.toString()).toBe('/'); + }))); + it('should eagerly update URL after redirects are applied with urlUpdateStrategy="eagar"', fakeAsync(inject([Router, Location], (router: Router, location: Location) => { const fixture = TestBed.createComponent(RootCmp);