27 KiB
Deprecation Summary
Angular strives to balance innovation and stability. Sometimes, APIs and features become obsolete and need to be removed or replaced so that Angular can stay current with new best practices, changing dependencies, or changes in the (web) platform itself.
To make these transitions as easy as possible, we deprecate APIs and features for a period of time before removing them. This gives you time to update your apps to the latest APIs and best practices.
This guide contains a summary of all Angular APIs and features that are currently deprecated.
For information about Angular's deprecation and removal practices, see Angular versioning and releases.
For step-by-step instructions on how to update to the latest Angular release, use the interactive update guide at update.angular.io.
{@a removed}
Removed in v8
The following APIs and features were previously announced as deprecated and have been removed starting with version 8.0.0:
Package | API or feature | Replacement | Notes |
---|---|---|---|
@angular/http | All | @angular/common/http | The entire package has been removed. See below. |
@angular/http/testing | All | @angular/common/http/testing | See below. |
@angular/platform-browser | DOCUMENT | @angular/common |
{@a http}
@angular/http
The entire @angular/http package has been removed. Use @angular/common/http instead.
The new API simplifies the default ergonomics (You don't need to map to json
anymore.) and supports typed return values and interceptors.
To update your apps:
- Replace
HttpModule
withHttpClientModule
- Replace the
Http
service with theHttpClient
service - Remove any map(
res => res.json()
) calls
For more information about using the replacement APIs, see the HttpClient guide.
Removed API | Replacement API |
---|---|
BaseRequestOptions | tbd |
BaseResponseOptions | tbd |
BrowserXhr | tbd |
Connection | tbd |
ConnectionBackend | tbd |
CookieXSRFStrategy | tbd |
Headers | tbd |
HttpModule | tbd |
Jsonp | tbd |
JSONPBackend | tbd |
JSONPConnection | tbd |
JsonpModule | tbd |
QueryEncoder | tbd |
ReadyState | tbd |
Request | tbd |
RequestMethod | tbd |
RequestOptions | tbd |
RequestOptionsArgs | tbd |
Response | tbd |
ResponseContentType | tbd |
ResponseOptions | tbd |
ResponseOptionsArgs | tbd |
ResponseType | tbd |
URLSearchParams | tbd |
XHRBackend | tbd |
XHRConnection | tbd |
XSRFStrategy | tbd |
@http/testing/MockBackend | tbd |
@http/testing/MockConnection | tbd |
Deprecated APIs
The following table lists all of the deprecated APIs, with details to help you plan your migration to a replacement.
To see a quick summary of all APIs that are deprecated, filter the API list by Status: deprecated. Deprecated APIs are indicated by strikethrough in the API reference pages.
{@a common}
@angular/common
API | Replacement | Deprecation announced | Notes |
---|---|---|---|
DeprecatedI18NPipesModule | CommonModule |
v5 | Pipes that rely the JS Intl API use the deprecated module, while the new CommonModule extracts and uses data from CLDR instead. For mappings to assist your update, see Date Formats. |
DeprecatedCurrencyPipe | CurrencyPipe | v5 | none |
DeprecatedDatePipe | DatePipe | v5 | none |
DeprecatedDecimalPipe | DecimalPipe | v5 | none |
DeprecatedPercentPipe | PercentPipe v5 | none |
@angular/core
The following exports from @angular/care
are deprecated:
Package | API | Deprecation announced | Removed in | Details | Replacement |
---|---|---|---|---|---|
core | animate | v5 or earlier | ? | none | tbd |
core | AnimationAnimateMetadata | v5 or earlier | ? | none | tbd |
core | AnimationEntryMetadata | v5 or earlier | ? | none | tbd |
core | AnimationGroupMetadata | v5 or earlier | ? | none | tbd |
core | AnimationKeyframe | v5 or earlier | ? | none | tbd |
core | AnimationKeyframesSequenceMetadata | v5 or earlier | ? | none | tbd |
core | AnimationMetadata | v5 or earlier | ? | none | tbd |
core | AnimationPlayer | v5 or earlier | ? | none | tbd |
core | AnimationSequenceMetadata | v5 or earlier | ? | none | tbd |
core | AnimationStateMetadata | v5 or earlier | ? | none | tbd |
core | AnimationStateTransitionMetadata | v5 or earlier | ? | none | tbd |
core | AnimationStyleMetadata | v5 or earlier | ? | none | tbd |
core | AnimationStyles | v5 or earlier | ? | none | tbd |
core | AnimationTransitionEvent | v5 or earlier | ? | none | tbd |
core | AnimationTransitionMetadata | v5 or earlier | ? | none | tbd |
core | AnimationTriggerMetadata | v5 or earlier | ? | none | tbd |
core | AUTO_STYLE | v5 or earlier | ? | none | tbd |
core | CollectionChangeRecord | v4.0.0 | in v7 docs | none | IterableChangeRecord |
core | DefaultIterableDiffer | v4.0.0 | in v7 docs | Should not be part of public API. | not applicable |
core | group | v5 or earlier | ? | none | tbd |
core | keyframes | v5 or earlier | ? | none | tbd |
core | ReflectiveInjector | v5 | in v7 docs | Slow and brings in a lot of code. | Injector.create |
core | ReflectiveKey | marked in v6, can't check v5 | in v7 docs | No replacement | |
core | RenderComponentType | marked in v4 docs | in v7 docs | none | RendererType2 and Renderer2 |
core | Renderer | marked in v4 docs | in v7 docs | none | Renderer2 |
core | RootRenderer | marked in v4 docs | in v7 docs | none | RendererFactory2 |
core | sequence | v5 or earlier | ? | none | tbd |
core | state | v5 or earlier | ? | none | tbd |
core | style | v5 or earlier | ? | none | tbd |
core | transition | v5 or earlier | ? | none | tbd |
core | trigger | v5 or earlier | ? | none | tbd |
@angular/forms
The following exports from @angular/forms
are deprecated:
Package | API | Deprecation announced | Removed in | Details | Replacement |
---|---|---|---|---|---|
forms | NgForm | v6 | will be removed in v9 | This has been deprecated to keep selectors consistent with other core Angular selectors, as element selectors are typically written in kebab-case. | See description in NgForm. Now deprecated: <ngForm #myForm="ngForm"> . Replacement: <ng-form #myForm="ngForm"> . |
forms | NgFormSelectorWarning | v6 (page added to API ref in v7 docs) | will be removed in v9 | This directive is solely used to display warnings when the deprecated ngForm selector is used. | not applicable |
Support for using ngForm element selector has been deprecated in Angular v6 and will be removed in Angular v9.
This has been deprecated to keep selectors consistent with other core Angular selectors, as element selectors are typically written in kebab-case.
For details, see https://angular.io/api/forms/NgForm#description
@angular/platform-browser
The following exports from @angular/platform-browser
are deprecated:
Package | API | Deprecation announced | Removed in | Details | Replacement |
---|---|---|---|---|---|
platform-browser | platform-browser/DOCUMENT | marked deprecated as far back as v4 docs | in v7 docs | none | Import from @angular/common |
platform-browser | NgProbeToken | marked deprecated as far back as API Reference (v2.4.10) docs | not in docs v5+ | none | Use the one from @angular/core |
@angular/router
The following exports from @angular/router
are deprecated:
Package | API | Deprecation announced | Removed in | Details | Replacement |
---|---|---|---|---|---|
router | RouterLink | v4 | candidate v7 | none | queryParamsHandling |
Two older properties are still available. They are less capable than their replacements, discouraged, and may be deprecated in a future Angular version.
-
params—An Observable that contains the required and optional parameters specific to the route. Use paramMap instead.
-
queryParams—An Observable that contains the query parameters available to all routes. Use queryParamMap instead.
See https://angular.io/guide/router#activated-route
@angular/upgrade
The following exports from @angular/upgrade
are deprecated:
Package | API | Deprecation announced | Removed in | Details | Replacement |
---|---|---|---|---|---|
upgrade | entire @angular/upgrade package |
v5? | in nv7 docs | All exports of this entry point are deprecated. Supports the upgrade path from AngularJS to Angular, allowing components from both systems to be used in the same application. All exports of this entry point are deprecated. Use @angular/upgrade/static. For more information about upgrading from AngularJS to Angular, see Upgrading from AngularJS. | none |
upgrade | UpgradeAdapter | v5 | in v7 docs | none | Use upgrade/static instead, which also supports Ahead-of-Time compilation |
upgrade | UpgradeAdapterRef | v5 | in v7 docs | none | Use upgrade/static instead, which also supports Ahead-of-Time compilation |
upgrade/static | getAngularLib | marked in v5 docs | in v7 docs | none | Use getAngularJSGlobal instead |
upgrade/static | setAngularLib | marked in v5 docs | in v7 docs | none | Use setAngularJSGlobal instead |
{@a features}
Deprecated features
Component styles
The shadow-piercing descendant combinator is deprecated and support is being removed from major browsers and tools. As such, we plan to drop support in Angular for all 3 of /deep/
, >>>
and ::ng-deep
). Until then ::ng-deep
is preferred for broader compatibility with the tools.
For more information, see /deep/, >>>, and ::ng-deep in the Component Styles guide].
ngModel with reactive forms
Support for using the ngModel
input property and ngModelChange
event with reactive form directives was deprecated in version 6.0.0.
For more information, see the usage notes of FormControlDirective and FormControlName.
Service worker versionedFiles
6.1.0 (2018-07-25) and 6.0.2 (2018-05-15)
service-worker: deprecate versionedFiles in asset-group resources (#23584) (1d378e2
)
As of v6 versionedFiles
and files
options have the same behavior. Use files
instead.
https://angular.io/guide/service-worker-config
As of v6 versionedFiles
and files
options have the same behavior. Use files
instead.
From update.angular.io 6.1 to 7.0: f you use the Angular Service worker, migrate any versionedFiles
to the files
array. The behavior is the same.
ReflectiveInjector replaced with StaticInjector (From blog)
In order to remove even more polyfills, we’ve replaced the ReflectiveInjector with the StaticInjector. This injector no longer requires the Reflect polyfill, reducing application size for most developers.
Before ReflectiveInjector.resolveAndCreate(providers);
After Injector.create(providers);
Note: This is marked v4 in the API reference docs.
{@a i18n-pipes}
Pipes that use the JS Intl API
Angular used to rely on the browser to provide number, date, and currency formatting using browser i18n APIs. This practice meant that most apps needed to use a polyfill, users were seeing inconsistent results across browsers, and common formats (such as the currency pipe) didn’t match developer expectations out of the box.
In version 4.3, Angular introduced new number, date, and currency pipes that increase standardization across browsers and eliminate the need for i18n polyfills. These pipes use the CLDR (instead of the JS Intl API) to provide extensive locale support.
In 5.0.0, Angular updated its pipes to use the CLRD implementation.
At the same time, it introduced DeprecatedI18NPipesModule
to provide access to the old behavior.
DeprecatedCurrencyPipe
DeprecatedDatePipe
DeprecatedDecimalPipe
DeprecatedPercentPipe
All Deprecated
pipes are deprecated and candidates for removal beginning in version 8.0.0
For more information about the mapping of pipe behavior between v4 and v5, see Date Formats.
Read more about the changes to our i18n pipes in the changelog. https://github.com/angular/angular/blob/master/CHANGELOG.md#i18n-pipes
If you aren’t ready for the new pipes, you can import DeprecatedI18NPipesModule
to get access to the old behavior.
If you use the following deprecated i18n pipes:
- date,
- currency,
- decimal,
- percent
You need the Intl API on all browsers except Chrome, Firefox, Edge, IE11 and Safari 10.
Removed in v6
The following APIs were removed in v6.0.0.
-
Animations APIs were moved from
@angular/core/animations
to@angular/animations
. In v6.0.0,@angular/core/animations
was removed. Imports from@angular/core
were announced as deprecated in v4. Use imports from the new package import { trigger, state, style, transition, animate } from@angular/animations
. If you import any animations services or tools from@angular/core
, you should import them from@angular/animations
. -
The
<template>
tag was deprecated in Angular v4 to avoid collisions (such as when using web components). Use<ng-template
> instead. (<template>
removed in v6.0.0 (2018-05-03)
https://angular.io/guide/aot-compiler#enablelegacytemplate
enableLegacyTemplate:
Use of the <template>
element was deprecated starting in Angular 4.0 in favor of using <ng-template>
to avoid colliding with the DOM's element of the same name. Setting this option to true enables the use of the deprecated <template>
element. This option is false by default. This option might be required by some third-party Angular libraries.
API or feature | Deprecation announced | Removed in | Details | Replacement |
---|---|---|---|---|
animate | v6.0.0 | This symbol has moved | Import from @angular/animations instead |
Removed in v5
API | Replacement | Notes |
---|---|---|
NgFor | NgForOf |
Deprecated in v4.0.0. Removed in v5.0.0 |
Other deprecations
The following changes and deprecations are mentioned in the update instructions at update.angular.io.
Updating from v5 to v6
- Replace ngOutletContext with ngTemplateOutletContext.
- Replace CollectionChangeRecord with IterableChangeRecord
- Anywhere you use Renderer, now use Renderer2
- If you use preserveQueryParams, instead use queryParamsHandling
- If you use DOCUMENT from @angular/platform-browser, you should start to import this from @angular/common
- Anywhere you use ReflectiveInjector, now use StaticInjector
- Choose a value of off for preserveWhitespaces in your tsconfig.json to gain the benefits of this setting, which was set to off by default in v6.
- Format of angular.json changed. Update your Angular CLI globally and locally, and migrate the configuration to the new angular.json format by following the instructions in update.angular.io.
- Update any scripts you may have in your package.json to use the latest Angular CLI commands. All CLI commands now use two dashes for flags (eg ng build --prod --source-map) to be POSIX compliant.
Updating v4 to v5
- Stop using DefaultIterableDiffer, KeyValueDiffers#factories, or IterableDiffers#factories
- Rename your template tags to ng-template
- Replace any OpaqueToken with InjectionToken.
- If you call DifferFactory.create(...) remove the ChangeDetectorRef argument.
- Stop passing any arguments to the constructor for ErrorHandler
- If you use ngProbeToken, make sure you import it from @angular/core instead of @angular/platform-browser
- If you use TrackByFn, instead use TrackByFunction
- If you import any animations services or tools from @angular/core, you should import them from @angular/animations
- Replace ngOutletContext with ngTemplateOutletContext.
- Replace CollectionChangeRecord with IterableChangeRecord
- Anywhere you use Renderer, now use Renderer2
- If you use preserveQueryParams, instead use queryParamsHandling
- If you rely on the date, currency, decimal, or percent pipes, in 5 you will see minor changes to the format. For applications using locales other than en-us you will need to import it and optionally locale_extended_fr from @angular/common/i18n_data/locale_fr and registerLocaleData(local).
- Do not rely on gendir, instead look at using skipTemplateCodeGen. Read More https://github.com/angular/angular/issues/19339#issuecomment-332607471%22
- Switch from HttpModule and the Http service to HttpClientModule and the HttpClient service. HttpClient simplifies the default ergonomics (You don't need to map to json anymore) and now supports typed return values and interceptors. Read more on angular.io
- If you use DOCUMENT from @angular/platform-browser, you should start to import this from @angular/common
- Anywhere you use ReflectiveInjector, now use StaticInjector
- Choose a value of off for preserveWhitespaces in your tsconfig.json to gain the benefits of this setting, which was set to off by default in v6.
Updating v2 to v4
- Ensure you don't use extends OnInit, or use extends with any lifecycle event. Instead use implements .
- Stop using deep imports, these symbols are now marked with ɵ and are not part of our public API.
- Stop using Renderer.invokeElementMethod as this method has been removed. There is not currently a replacement.
- Stop using DefaultIterableDiffer, KeyValueDiffers#factories, or IterableDiffers#factories
- If you use animations in your application, you should import BrowserAnimationsModule from @angular/platform-browser/animations in your App NgModule.
- Replace RootRenderer with RendererFactoryV2 instead.
- Rename your template tags to ng-template
- Replace any OpaqueToken with InjectionToken.
- If you call DifferFactory.create(...) remove the ChangeDetectorRef argument.
- Stop passing any arguments to the constructor for ErrorHandler
- If you use ngProbeToken, make sure you import it from @angular/core instead of @angular/platform-browser
- If you use TrackByFn, instead use TrackByFunction
- If you import any animations services or tools from @angular/core, you should import them from @angular/animations
- Replace ngOutletContext with ngTemplateOutletContext.
- Replace CollectionChangeRecord with IterableChangeRecord
- Anywhere you use Renderer, now use Renderer2
- If you use preserveQueryParams, instead use queryParamsHandling