Angular 1.x -> AngularJS Angular 1 -> AngularJS Angular1 -> AngularJS Angular 2+ -> Angular Angular 2.0 -> Angular Angular2 -> Angular I have deliberately not touched any of the symbol names as that would cause big merge collisions with Tobias's work. All the renames are in .md, .json, and inline comments and jsdocs. PR Close #14132
91 lines
2.5 KiB
TypeScript
91 lines
2.5 KiB
TypeScript
/**
|
|
* @license
|
|
* Copyright Google Inc. All Rights Reserved.
|
|
*
|
|
* Use of this source code is governed by an MIT-style license that can be
|
|
* found in the LICENSE file at https://angular.io/license
|
|
*/
|
|
|
|
import {APP_BOOTSTRAP_LISTENER, ApplicationRef, ComponentRef, InjectionToken} from '@angular/core';
|
|
import {ExtraOptions, ROUTER_CONFIGURATION, ROUTER_INITIALIZER, Router, RouterPreloader} from '@angular/router';
|
|
import {UpgradeModule} from '@angular/upgrade/static';
|
|
|
|
|
|
|
|
/**
|
|
* @whatItDoes Creates an initializer that in addition to setting up the Angular
|
|
* router sets up the ngRoute integration.
|
|
*
|
|
* @howToUse
|
|
*
|
|
* ```
|
|
* @NgModule({
|
|
* imports: [
|
|
* RouterModule.forRoot(SOME_ROUTES),
|
|
* UpgradeModule
|
|
* ],
|
|
* providers: [
|
|
* RouterUpgradeInitializer
|
|
* ]
|
|
* })
|
|
* export class AppModule {
|
|
* ngDoBootstrap() {}
|
|
* }
|
|
* ```
|
|
*
|
|
* @experimental
|
|
*/
|
|
export const RouterUpgradeInitializer = {
|
|
provide: ROUTER_INITIALIZER,
|
|
useFactory: initialRouterNavigation,
|
|
deps: [UpgradeModule, ApplicationRef, RouterPreloader, ROUTER_CONFIGURATION]
|
|
};
|
|
|
|
/**
|
|
* @internal
|
|
*/
|
|
export function initialRouterNavigation(
|
|
ngUpgrade: UpgradeModule, ref: ApplicationRef, preloader: RouterPreloader,
|
|
opts: ExtraOptions): Function {
|
|
return () => {
|
|
if (!ngUpgrade.$injector) {
|
|
throw new Error(`
|
|
RouterUpgradeInitializer can be used only after UpgradeModule.bootstrap has been called.
|
|
Remove RouterUpgradeInitializer and call setUpLocationSync after UpgradeModule.bootstrap.
|
|
`);
|
|
}
|
|
|
|
const router = ngUpgrade.injector.get(Router);
|
|
const ref = ngUpgrade.injector.get(ApplicationRef);
|
|
|
|
(router as any).resetRootComponentType(ref.componentTypes[0]);
|
|
preloader.setUpPreloading();
|
|
if (opts.initialNavigation === false) {
|
|
router.setUpLocationChangeListener();
|
|
} else {
|
|
router.initialNavigation();
|
|
}
|
|
|
|
setUpLocationSync(ngUpgrade);
|
|
};
|
|
}
|
|
|
|
/**
|
|
* @whatItDoes Sets up a location synchronization.
|
|
*
|
|
* History.pushState does not fire onPopState, so the angular2 location
|
|
* doesn't detect it. The workaround is to attach a location change listener
|
|
*
|
|
* @experimental
|
|
*/
|
|
export function setUpLocationSync(ngUpgrade: UpgradeModule): void {
|
|
const router: Router = ngUpgrade.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);
|
|
});
|
|
}
|