@angular/upgrade
Advanced tools
Changelog
14.1.0 (2022-07-20)
createNgModuleRef
is deprecated in favor of newly added createNgModule
one.inject()
has been deprecated, in favor of the
new options object. Correspondingly, InjectFlags
is deprecated as well.| Commit | Type | Description |
| -- | -- | -- |
| 55308f2df5 | feat | add provideAnimations()
and provideNoopAnimations()
functions (#46793) |
| Commit | Type | Description |
| -- | -- | -- |
| 4a2e7335b1 | feat | make the CommonModule
pipes standalone (#46401) |
| a7597dd080 | feat | make the CommonModule directives standalone (#46469) |
| Commit | Type | Description | | -- | -- | -- | | 33ce3883a5 | feat | Add extended diagnostic to warn when missing let on ngForOf (#46683) | | 6f11a58040 | feat | Add extended diagnostic to warn when text attributes are intended to be bindings (#46161) | | 9e836c232f | feat | warn when style suffixes are used with attribute bindings (#46651) |
| Commit | Type | Description | | -- | -- | -- | | 93c65e7b14 | feat | add extended diagnostic for non-nullable optional chains (#46686) | | 131d029da1 | feat | detect missing control flow directive imports in standalone components (#46146) | | 6b8e60c06a | fix | improve the missingControlFlowDirective message (#46846) |
| Commit | Type | Description |
| -- | -- | -- |
| e8e8e5f171 | feat | add createComponent
function |
| b5153814af | feat | add reflectComponentType
function |
| 96c6139c9a | feat | add ability to set inputs on ComponentRef (#46641) |
| a6d5fe202c | feat | alias createNgModuleRef
as createNgModule
(#46789) |
| 71e606d3c3 | feat | expose EnvironmentInjector on ApplicationRef (#46665) |
| 19e6d9ccd3 | feat | import AsyncStackTaggingZone if available (#46693) |
| a7a14df5f8 | feat | introduce EnvironmentInjector.runInContext
API (#46653) |
| fa52b6e906 | feat | options object to supersede bit flags for inject()
(#46649) |
| af20112222 | feat | support the descendants option for ContentChild queries (#46638) |
| 945a3ad359 | fix | Fix runInContext
for NgModuleRef
injector (#46877) |
| bb7c80477b | fix | make parent injector argument required in createEnvironmentInjector
(#46397) |
| Commit | Type | Description | | -- | -- | -- | | 82acbf919b | feat | improve error message for nullish header (#46059) |
| Commit | Type | Description |
| -- | -- | -- |
| 53ca936366 | feat | Add ability to create UrlTree
from any ActivatedRouteSnapshot
(#45877) |
| de058bba99 | feat | Add CanMatch guard to control whether a Route should match (#46021) |
| 6c1357dd7d | feat | Add stable cancelation code to NavigationCancel
event (#46675) |
| a4ce273e50 | feat | Add the target RouterStateSnapshot
to NavigationError
(#46731) |
| abe3759e24 | fix | allow to return UrlTree
from CanMatchFn
(#46455) |
| e8c7dd10e9 | fix | Ensure APP_INITIALIZER
of enabledBlocking
option completes (#46026) |
| ce20ed067f | fix | Ensure Route injector is created before running CanMatch guards (#46394) |
| 6a7b818d94 | fix | Ensure target RouterStateSnapshot
is defined in NavigationError
(#46842) |
| f94c6f433d | fix | Expose CanMatchFn as public API (#46394) |
| e8ae0fe3e9 | fix | Fix cancelation code for canLoad rejections (#46752) |
| Commit | Type | Description |
| -- | -- | -- |
| e9cb0454dc | feat | more closely align UpgradeModule#bootstrap()
with angular.bootstrap()
(#46214) |
AleksanderBodurri, Alex Rickabaugh, Andrew Kushnir, Andrew Scott, Cédric Exbrayat, Dmitrij Kuba, Dylan Hunn, George Kalpakas, Jessica Janiuk, JiaLiPassion, Joey Perrott, John Vandenberg, JoostK, Keith Li, Or'el Ben-Ya'ir, Paul Gschwendtner, Pawel Kozlowski, SyedAhm3r, arturovt, mariu, markostanimirovic and mgechev
<!-- CHANGELOG SPLIT MARKER --><a name="14.0.7"></a>
Changelog
14.0.3 (2022-06-22)
| Commit | Type | Description | | -- | -- | -- | | 3dd7bb3f8f | fix | reset the start and done fns on player reset (#46364) |
| Commit | Type | Description | | -- | -- | -- | | c086653655 | fix | deduplicate imports of standalone components in JIT compiler (#46439) | | 5d3b97e1f8 | fix | handle NgModules with standalone pipes in TestBed correctly (#46407) |
| Commit | Type | Description | | -- | -- | -- | | 6ad7b40a6f | fix | invalid style attribute being generated for null values (#46433) |
4javier, Aakash, Alan Agius, Andrew Kushnir, Aristeidis Bampakos, Dany Paredes, Derek Cormier, JoostK, Kristiyan Kostadinov, Paul Gschwendtner, Ramesh Thiruchelvam, behrooz bozorg chami, dario-piotrowicz, markostanimirovic, renovate[bot] and web-dave
<!-- CHANGELOG SPLIT MARKER --><a name="14.0.2"></a>
Changelog
14.0.2 (2022-06-15)
| Commit | Type | Description | | -- | -- | -- | | ef5cba3df7 | fix | allow null in ngComponentOutlet (#46280) |
| Commit | Type | Description |
| -- | -- | -- |
| 8ecfd71fd7 | fix | don't emit empty providers array (#46301) |
| b92c1a6ada | fix | use inline type-check blocks for components outside rootDir
(#46096) |
| Commit | Type | Description | | -- | -- | -- | | 3fd8948b4a | fix | Resolve forwardRef declarations for jit (#46334) |
Alex Rickabaugh, Andrew Scott, Badawi7, Daniel Schmitz, Derek Cormier, JoostK, Kevin Davila, Kristiyan Kostadinov, Paul Draper, Paul Gschwendtner, Tom Eustace, Totati, Younes Jaaidi, alefra, dario-piotrowicz, markostanimirovic, mgechev, piyush132000, sten-bone and vivekkoya
<!-- CHANGELOG SPLIT MARKER --><a name="14.0.1"></a>
Changelog
14.0.1 (2022-06-08)
| Commit | Type | Description |
| -- | -- | -- |
| b00d237c0e | fix | update API extractor version (#46259) |
| 9a0a7bac21 | perf | reduce input files for ng_package
rollup and type bundle actions (#46187) |
| Commit | Type | Description | | -- | -- | -- | | dde0b7f4b3 | fix | allow FormBuilder.group(...) to accept optional fields. (#46253) |
Adrien Crivelli, Alan Agius, Alex Rickabaugh, Andrew Kushnir, Andrew Scott, Dylan Hunn, Fabrizio Fallico, George Kalpakas, Jelle Bruisten, JoostK, Kristiyan Kostadinov, Krzysztof Platis, Paul Gschwendtner, Phalgun Vaddepalli, San Leen, dario-piotrowicz, mgechev and wellWINeo
<!-- CHANGELOG SPLIT MARKER --><a name="14.0.0"></a>
Changelog
14.0.0 (2022-06-02)
Blog post "Angular v14 is now available".
AnimationDriver.getParentElement
method has become required, so any
implementors of this interface are now required to provide an implementation
for this method. This breakage is unlikely to affect application developers,
as AnimationDriver
is not expected to be implemented in user code.Keyframes names are now prefixed with the component's "scope name". For example, the following keyframes rule in a component definition, whose "scope name" is host-my-cmp:
@keyframes foo { ... }
will become:
@keyframes host-my-cmp_foo { ... }
Any TypeScript/JavaScript code which relied on the names of keyframes rules will no longer match.
The recommended solutions in this case are to either:
None
or ShadowDom
Support for Node.js v12 has been removed as it will become EOL on 2022-04-30. Please use Node.js v14.15 or later.
TypeScript versions older than 4.6 are no longer supported.
Forms [email] input coercion
Forms [email] input value will be considered as true if it is defined with any value rather than false and 'false'.
Since Ivy, TestBed doesn't use AOT summaries. The aotSummaries
fields in TestBed APIs were present, but unused. The fields were deprecated in previous major version and in v14 those fields are removed. The aotSummaries
fields were completely unused, so you can just drop them from the TestBed APIs usage.
Forms classes accept a generic.
Forms model classes now accept a generic type parameter. Untyped versions of these classes are available to opt-out of the new, stricter behavior.
objects with a length key set to zero will no longer validate as empty.
This is technically a breaking change, since objects with a key length
and value 0
will no longer validate as empty. This is a very minor change, and any reliance on this behavior is probably a bug anyway.
Queries including + will now actually query for + instead of space. Most workarounds involving custom codecs will be unaffected. Possible server-side workarounds will need to be undone.
JSONP will throw an error when headers are set on a reques
JSONP does not support headers being set on requests. Before when a request was sent to a JSONP backend that had headers set the headers were ignored. The JSONP backend will now throw an error if it receives a request that has any headers set. Any uses of JSONP on requests with headers set will need to remove the headers to avoid the error.
This change may cause a breaking change in unit tests that are implicitly depending on a specific number and sequence of change detections in order for their assertions to pass.
This may break invalid calls to TransferState
methods.
This tightens parameter types of TransferState
usage, and is a minor breaking change which may reveal existing problematic calls.
The type of Route.pathMatch
is now stricter. Places that use
pathMatch
will likely need to be updated to have an explicit
Route
/Routes
type so that TypeScript does not infer the type as
string
.
When returning a Promise
from the
LoadChildrenCallback
, the possible type is now restricted to
Type<any>|NgModuleFactory<any>
rather than any
.
initialNavigation: 'enabled'
was deprecated in v11 and is replaced by
initialNavigation: 'enabledBlocking'
.
The type of component
on ActivatedRoute
and ActivatedRouteSnapshot
includes string
. In reality, this is not the case. The component
cannot be anything other than a component class.
initialUrl
is set to string|UrlTree
but in reality,
the Router
only sets it to a value that will always be UrlTree
initialUrl
is documented as "The target URL passed into the
Router#navigateByUrl()
call before navigation" but the value
actually gets set to something completely different. It's set to the
current internal UrlTree
of the Router at the time navigation
occurs.With this change, there is no exact replacement for the old value of
initialUrl
because it was never intended to be exposed.
Router.url
is likely the best replacement for this.
In more specific use-cases, tracking the finalUrl
between successful
navigations can also be used as a replacement.
Lazy loaded configs are now also validated once loaded like the initial set of routes are. Lazy loaded modules which have invalid Route configs will now error. Note that this is only done in dev mode so there is no production impact of this change.
When a guard returns a UrlTree
, the router would previously schedule
the redirect navigation within a setTimeout
. This timeout is now removed,
which can result in test failures due to incorrectly written tests.
Tests which perform navigations should ensure that all timeouts are
flushed before making assertions. Tests should ensure they are capable
of handling all redirects from the original navigation.
Previously, resolvers were waiting to be completed
before proceeding with the navigation and the Router would take the last
value emitted from the resolver.
The router now takes only the first emitted value by the resolvers
and then proceeds with navigation. This is now consistent with Observables
returned by other guards: only the first value is used.