mirror of
https://github.com/angular/angular.git
synced 2026-09-14 13:54:52 +08: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:
committed by
Andrew Scott
parent
f555050f9a
commit
bec2e79e81
@@ -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.
|
||||
*
|
||||
|
||||
Reference in New Issue
Block a user