From 1d2f5c1101ccd182f5b528de52583a1b98dd6789 Mon Sep 17 00:00:00 2001 From: Andrew Scott Date: Mon, 18 Apr 2022 14:57:19 -0700 Subject: [PATCH] refactor(router): deprecate no longer needed resolver fields (#45597) DEPRECATED: The `resolver` argument of the `RouterOutletContract.activateWith` function and the `resolver` field of the `OutletContext` class are deprecated. Passing component factory resolvers are no longer needed. The `ComponentFactoryResolver`-related symbols were deprecated in `@angular/core` package since v13. PR Close #45597 --- aio/content/guide/deprecations.md | 12 ++++++++++++ goldens/public-api/router/index.md | 3 ++- packages/router/src/directives/router_outlet.ts | 3 +++ packages/router/src/router_outlet_context.ts | 4 ++++ 4 files changed, 21 insertions(+), 1 deletion(-) diff --git a/aio/content/guide/deprecations.md b/aio/content/guide/deprecations.md index 5fce1324be1..33270229760 100644 --- a/aio/content/guide/deprecations.md +++ b/aio/content/guide/deprecations.md @@ -77,6 +77,8 @@ v14 - v17 | `@angular/forms` | [`FormBuilder.group` legacy options parameter](api/forms/FormBuilder#group) | v14 | | `@angular/platform-server` | [`renderModuleFactory`](#platform-server) | v15 | | `@angular/router` | [`relativeLinkResolution`](#relativeLinkResolution) | v16 | +| `@angular/router` | [`resolver` argument in `RouterOutletContract.activateWith`](#router) | v16 | +| `@angular/router` | [`resolver` field of the `OutletContext` class](#router) | v16 | | `@angular/service-worker` | [`SwUpdate#activated`](api/service-worker/SwUpdate#activated) | v16 | | `@angular/service-worker` | [`SwUpdate#available`](api/service-worker/SwUpdate#available) | v16 | | template syntax | [`/deep/`, `>>>`, and `::ng-deep`](#deep-component-style-selector) | unspecified | @@ -147,6 +149,16 @@ In the [API reference section](api) of this site, deprecated APIs are indicated | [`TestBed.get`](api/core/testing/TestBed#get) | [`TestBed.inject`](api/core/testing/TestBed#inject) | v9 | Same behavior, but type safe. | | [`async`](api/core/testing/async) | [`waitForAsync`](api/core/testing/waitForAsync) | v10 | Same behavior, but rename to avoid confusion. | + + +### @angular/router + +| API | Replacement | Deprecation announced | Details | +|:--- |:--- |:--- |:--- | +| [`resolver` argument in `RouterOutletContract.activateWith`](api/router/RouterOutletContract#activatewith) | No replacement needed | v14 | Component factories are not required to create an instance of a component dynamically. Passing a factory resolver via `resolver` argument is no longer needed. | +| [`resolver` field of the `OutletContext` class](api/router/OutletContext#resolver) | No replacement needed | v14 | Component factories are not required to create an instance of a component dynamically. Passing a factory resolver via `resolver` class field is no longer needed. | + + ### @angular/platform-browser-dynamic diff --git a/goldens/public-api/router/index.md b/goldens/public-api/router/index.md index 9af1ac5f196..c8165535368 100644 --- a/goldens/public-api/router/index.md +++ b/goldens/public-api/router/index.md @@ -360,7 +360,7 @@ export class OutletContext { injector: EnvironmentInjector | null; // (undocumented) outlet: RouterOutletContract | null; - // (undocumented) + // @deprecated (undocumented) resolver: ComponentFactoryResolver | null; // (undocumented) route: ActivatedRoute | null; @@ -684,6 +684,7 @@ export interface RouterOutletContract { activatedRouteData: Data; activateEvents?: EventEmitter; activateWith(activatedRoute: ActivatedRoute, environmnetInjector: EnvironmentInjector | null): void; + // @deprecated activateWith(activatedRoute: ActivatedRoute, resolver: ComponentFactoryResolver | null): void; attach(ref: ComponentRef, activatedRoute: ActivatedRoute): void; attachEvents?: EventEmitter; diff --git a/packages/router/src/directives/router_outlet.ts b/packages/router/src/directives/router_outlet.ts index f6795c21953..6bf40387b4a 100644 --- a/packages/router/src/directives/router_outlet.ts +++ b/packages/router/src/directives/router_outlet.ts @@ -53,6 +53,9 @@ export interface RouterOutletContract { activateWith(activatedRoute: ActivatedRoute, environmnetInjector: EnvironmentInjector|null): void; /** * Called by the `Router` when the outlet should activate (create a component). + * + * @deprecated Passing a resolver to retrieve a component factory is not required and is + * deprecated since v14. */ activateWith(activatedRoute: ActivatedRoute, resolver: ComponentFactoryResolver|null): void; diff --git a/packages/router/src/router_outlet_context.ts b/packages/router/src/router_outlet_context.ts index 598baeeaa86..7b0792f26f7 100644 --- a/packages/router/src/router_outlet_context.ts +++ b/packages/router/src/router_outlet_context.ts @@ -20,6 +20,10 @@ import {ActivatedRoute} from './router_state'; export class OutletContext { outlet: RouterOutletContract|null = null; route: ActivatedRoute|null = null; + /** + * @deprecated Passing a resolver to retrieve a component factory is not required and is + * deprecated since v14. + */ resolver: ComponentFactoryResolver|null = null; injector: EnvironmentInjector|null = null; children = new ChildrenOutletContexts();