mirror of
https://github.com/ionic-team/ionic-framework.git
synced 2025-08-15 17:42:15 +08:00
116 lines
2.7 KiB
TypeScript
116 lines
2.7 KiB
TypeScript
import {
|
|
Location
|
|
} from '@angular/common';
|
|
|
|
import {
|
|
ApplicationRef,
|
|
Compiler,
|
|
Injector,
|
|
ModuleWithProviders,
|
|
NgModule,
|
|
NgModuleFactoryLoader,
|
|
Optional,
|
|
} from '@angular/core';
|
|
|
|
import {ɵgetDOM as getDOM} from '@angular/platform-browser';
|
|
|
|
import {
|
|
ChildrenOutletContexts,
|
|
ExtraOptions,
|
|
ROUTER_CONFIGURATION,
|
|
ROUTES,
|
|
Route,
|
|
RouteReuseStrategy,
|
|
Router,
|
|
UrlHandlingStrategy,
|
|
UrlSerializer
|
|
} from '@angular/router';
|
|
|
|
import { IonicAngularModule } from '../module';
|
|
|
|
import { PushPopOutletContexts } from './push-pop-outlet-contexts';
|
|
import { monkeyPatchRouter } from './monkey-patch-router';
|
|
import { RouteEventHandler } from './route-event-handler';
|
|
import { RouterOutlet } from './outlet';
|
|
import { flatten } from './router-utils';
|
|
|
|
@NgModule({
|
|
declarations: [
|
|
RouterOutlet
|
|
],
|
|
imports: [
|
|
IonicAngularModule
|
|
],
|
|
exports: [
|
|
RouterOutlet
|
|
]
|
|
})
|
|
export class IonicRouterModule {
|
|
static forRoot(): ModuleWithProviders {
|
|
return {
|
|
ngModule: IonicRouterModule,
|
|
providers: [
|
|
{
|
|
provide: ChildrenOutletContexts,
|
|
useClass: PushPopOutletContexts
|
|
},
|
|
{
|
|
provide: Router,
|
|
useFactory: setupRouter,
|
|
deps: [
|
|
ApplicationRef, UrlSerializer, ChildrenOutletContexts, Location, Injector,
|
|
NgModuleFactoryLoader, Compiler, ROUTES, ROUTER_CONFIGURATION,
|
|
[UrlHandlingStrategy, new Optional()], [RouteReuseStrategy, new Optional()]
|
|
]
|
|
},
|
|
RouteEventHandler
|
|
]
|
|
};
|
|
}
|
|
}
|
|
|
|
export function setupRouter(
|
|
_ref: ApplicationRef, urlSerializer: UrlSerializer, contexts: ChildrenOutletContexts,
|
|
location: Location, injector: Injector, loader: NgModuleFactoryLoader, compiler: Compiler,
|
|
config: Route[][], opts: ExtraOptions = {}, urlHandlingStrategy?: UrlHandlingStrategy,
|
|
routeReuseStrategy?: RouteReuseStrategy) {
|
|
|
|
const router = new Router(
|
|
null, urlSerializer, contexts, location, injector, loader, compiler, flatten(config));
|
|
|
|
monkeyPatchRouter(router);
|
|
|
|
|
|
if (urlHandlingStrategy) {
|
|
router.urlHandlingStrategy = urlHandlingStrategy;
|
|
}
|
|
|
|
if (routeReuseStrategy) {
|
|
router.routeReuseStrategy = routeReuseStrategy;
|
|
}
|
|
|
|
if (opts.errorHandler) {
|
|
router.errorHandler = opts.errorHandler;
|
|
}
|
|
|
|
if (opts.enableTracing) {
|
|
const dom = getDOM();
|
|
router.events.subscribe((e: any) => {
|
|
dom.logGroup(`Router Event: ${(e.constructor).name}`);
|
|
dom.log(e.toString());
|
|
dom.log(e);
|
|
dom.logGroupEnd();
|
|
});
|
|
}
|
|
|
|
if (opts.onSameUrlNavigation) {
|
|
router.onSameUrlNavigation = opts.onSameUrlNavigation;
|
|
}
|
|
|
|
if (opts.paramsInheritanceStrategy) {
|
|
router.paramsInheritanceStrategy = opts.paramsInheritanceStrategy;
|
|
}
|
|
|
|
return router;
|
|
}
|