From f5bb99931989357c4a053c93c82b92c2740e7d5e Mon Sep 17 00:00:00 2001 From: vsavkin Date: Thu, 23 Nov 2017 11:49:22 -0500 Subject: [PATCH] feat(router): add a function set up router sync when used with downgradeModule --- packages/router/upgrade/src/upgrade.ts | 28 +++++++++++++++++--------- 1 file changed, 19 insertions(+), 9 deletions(-) diff --git a/packages/router/upgrade/src/upgrade.ts b/packages/router/upgrade/src/upgrade.ts index 82336fd35d..40e399e6b0 100644 --- a/packages/router/upgrade/src/upgrade.ts +++ b/packages/router/upgrade/src/upgrade.ts @@ -6,7 +6,7 @@ * found in the LICENSE file at https://angular.io/license */ -import {APP_BOOTSTRAP_LISTENER, ComponentRef, InjectionToken} from '@angular/core'; +import {APP_BOOTSTRAP_LISTENER, ComponentRef, InjectionToken, Injector} from '@angular/core'; import {Router} from '@angular/router'; import {UpgradeModule} from '@angular/upgrade/static'; @@ -50,7 +50,7 @@ export function locationSyncBootstrapListener(ngUpgrade: UpgradeModule) { } /** - * @whatItDoes Sets up a location synchronization. + * @whatItDoes Sets up a location synchronization using the provided UpgradeModule. * * History.pushState does not fire onPopState, so the Angular location * doesn't detect it. The workaround is to attach a location change listener @@ -64,13 +64,23 @@ export function setUpLocationSync(ngUpgrade: UpgradeModule) { Remove RouterUpgradeInitializer and call setUpLocationSync after UpgradeModule.bootstrap. `); } + setUpRouterSync(ngUpgrade.injector, ngUpgrade.$injector); +} - const router: Router = ngUpgrade.injector.get(Router); +/** + * @whatItDoes Sets up a router synchronization using the Angular and AngularJS injectors. + * + * History.pushState does not fire onPopState, so the Angular location + * doesn't detect it. The workaround is to attach a location change listener + * + * @experimental + */ +export function setUpRouterSync(injector: Injector, $injector: any) { + const router: Router = injector.get(Router); const url = document.createElement('a'); - ngUpgrade.$injector.get('$rootScope') - .$on('$locationChangeStart', (_: any, next: string, __: string) => { - url.href = next; - router.navigateByUrl(url.pathname + url.search + url.hash); - }); -} + $injector.get('$rootScope').$on('$locationChangeStart', (_: any, next: string, __: string) => { + url.href = next; + router.navigateByUrl(url.pathname + url.search + url.hash); + }); +} \ No newline at end of file