diff --git a/packages/router/src/navigation_transition.ts b/packages/router/src/navigation_transition.ts index 4e6f819e937..e37d1b0ed27 100644 --- a/packages/router/src/navigation_transition.ts +++ b/packages/router/src/navigation_transition.ts @@ -7,13 +7,13 @@ */ import {Location} from '@angular/common'; -import {Injectable, NgModuleRef, Type} from '@angular/core'; +import {inject, Injectable, NgModuleRef, Type} from '@angular/core'; import {BehaviorSubject, combineLatest, EMPTY, Observable, of, Subject} from 'rxjs'; import {catchError, defaultIfEmpty, filter, finalize, map, switchMap, take, tap} from 'rxjs/operators'; import {createRouterState} from './create_router_state'; -import {Event, GuardsCheckEnd, GuardsCheckStart, NavigationCancel, NavigationCancellationCode, NavigationEnd, NavigationError, NavigationSkipped, NavigationSkippedCode, NavigationStart, NavigationTrigger, ResolveEnd, ResolveStart, RoutesRecognized} from './events'; -import {NavigationBehaviorOptions, QueryParamsHandling, Routes} from './models'; +import {Event, GuardsCheckEnd, GuardsCheckStart, NavigationCancel, NavigationCancellationCode, NavigationEnd, NavigationError, NavigationSkipped, NavigationSkippedCode, NavigationStart, NavigationTrigger, ResolveEnd, ResolveStart, RouteConfigLoadEnd, RouteConfigLoadStart, RoutesRecognized} from './events'; +import {NavigationBehaviorOptions, QueryParamsHandling, Route, Routes} from './models'; import {isNavigationCancelingError, isRedirectingNavigationCancelingError, redirectingNavigationError} from './navigation_canceling_error'; import {activateRoutes} from './operators/activate_routes'; import {applyRedirects} from './operators/apply_redirects'; @@ -268,7 +268,6 @@ interface InternalRouterInterface { rawUrlTree: UrlTree; transitions: BehaviorSubject; navigationId: number; - configLoader: RouterConfigLoader; ngModule: NgModuleRef; readonly routerState: RouterState; errorHandler: ErrorHandler; @@ -299,6 +298,14 @@ export class NavigationTransitions { currentNavigation: Navigation|null = null; lastSuccessfulNavigation: Navigation|null = null; readonly events = new Subject(); + private readonly configLoader = inject(RouterConfigLoader); + + constructor() { + const onLoadStart = (r: Route) => this.events.next(new RouteConfigLoadStart(r)); + const onLoadEnd = (r: Route) => this.events.next(new RouteConfigLoadEnd(r)); + this.configLoader.onLoadEndListener = onLoadEnd; + this.configLoader.onLoadStartListener = onLoadStart; + } setupNavigations(transitions: Observable, router: InternalRouterInterface): Observable { @@ -380,7 +387,7 @@ export class NavigationTransitions { // ApplyRedirects applyRedirects( - router.ngModule.injector, router.configLoader, + router.ngModule.injector, this.configLoader, router.urlSerializer, router.config), // Update the currentNavigation @@ -556,7 +563,7 @@ export class NavigationTransitions { const loaders: Array> = []; if (route.routeConfig?.loadComponent && !route.routeConfig._loadedComponent) { - loaders.push(router.configLoader.loadComponent(route.routeConfig) + loaders.push(this.configLoader.loadComponent(route.routeConfig) .pipe( tap(loadedComponent => { route.component = loadedComponent; diff --git a/packages/router/src/router.ts b/packages/router/src/router.ts index f158c93a0e2..cd83849bb25 100644 --- a/packages/router/src/router.ts +++ b/packages/router/src/router.ts @@ -12,13 +12,13 @@ import {BehaviorSubject, Observable, of, SubscriptionLike} from 'rxjs'; import {createUrlTree} from './create_url_tree'; import {RuntimeErrorCode} from './errors'; -import {Event, NavigationCancel, NavigationCancellationCode, NavigationTrigger, RouteConfigLoadEnd, RouteConfigLoadStart} from './events'; -import {NavigationBehaviorOptions, OnSameUrlNavigation, Route, Routes} from './models'; +import {Event, NavigationTrigger} from './events'; +import {NavigationBehaviorOptions, OnSameUrlNavigation, Routes} from './models'; import {Navigation, NavigationExtras, NavigationTransition, NavigationTransitions, RestoredState, UrlCreationOptions} from './navigation_transition'; import {TitleStrategy} from './page_title_strategy'; import {RouteReuseStrategy} from './route_reuse_strategy'; import {ErrorHandler, ExtraOptions, ROUTER_CONFIGURATION} from './router_config'; -import {RouterConfigLoader, ROUTES} from './router_config_loader'; +import {ROUTES} from './router_config_loader'; import {ChildrenOutletContexts} from './router_outlet_context'; import {createEmptyState, RouterState} from './router_state'; import {Params} from './shared'; @@ -202,8 +202,6 @@ export class Router { return (this.location.getState() as RestoredState | null)?.ɵrouterPageId; } /** @internal */ - configLoader: RouterConfigLoader; - /** @internal */ ngModule: NgModuleRef; private console: Console; private isNgZoneEnabled: boolean = false; @@ -368,12 +366,6 @@ export class Router { compiler: Compiler, public config: Routes, ) { - const onLoadStart = (r: Route) => this.triggerEvent(new RouteConfigLoadStart(r)); - const onLoadEnd = (r: Route) => this.triggerEvent(new RouteConfigLoadEnd(r)); - this.configLoader = injector.get(RouterConfigLoader); - this.configLoader.onLoadEndListener = onLoadEnd; - this.configLoader.onLoadStartListener = onLoadStart; - this.ngModule = injector.get(NgModuleRef); this.console = injector.get(Console); const ngZone = injector.get(NgZone); @@ -496,10 +488,6 @@ export class Router { return this.navigationTransitions.currentNavigation; } - private triggerEvent(event: Event): void { - this.navigationTransitions.events.next(event); - } - /** * Resets the route configuration used for navigation and generating links. *