mirror of
https://github.com/angular/angular
synced 2026-05-24 09:28:37 +00:00
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
This commit is contained in:
parent
6810a04143
commit
7b1d63e939
2 changed files with 16 additions and 21 deletions
|
|
@ -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<NavigationTransition>;
|
||||
navigationId: number;
|
||||
configLoader: RouterConfigLoader;
|
||||
ngModule: NgModuleRef<any>;
|
||||
readonly routerState: RouterState;
|
||||
errorHandler: ErrorHandler;
|
||||
|
|
@ -299,6 +298,14 @@ export class NavigationTransitions {
|
|||
currentNavigation: Navigation|null = null;
|
||||
lastSuccessfulNavigation: Navigation|null = null;
|
||||
readonly events = new Subject<Event>();
|
||||
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<NavigationTransition>, router: InternalRouterInterface):
|
||||
Observable<NavigationTransition> {
|
||||
|
|
@ -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<Observable<void>> = [];
|
||||
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;
|
||||
|
|
|
|||
|
|
@ -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<any>;
|
||||
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.
|
||||
*
|
||||
|
|
|
|||
Loading…
Reference in a new issue