From 7b1d63e939cfb08a80846bf64c90aa8ca0d21e14 Mon Sep 17 00:00:00 2001 From: Andrew Scott Date: Wed, 16 Nov 2022 15:45:11 -0800 Subject: [PATCH] refactor(router): Move configLoader to transition handler (#48202) The ConfigLoader is only used as part of the navigation transition. Moving the loader there completes the removal of event triggering in the router code. This all now lives in the transition handler (plus the router scroller, but let's ignore that...). PR Close #48202 --- packages/router/src/navigation_transition.ts | 19 +++++++++++++------ packages/router/src/router.ts | 18 +++--------------- 2 files changed, 16 insertions(+), 21 deletions(-) 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. *