Angular 21 (noiembrie 2025) și 22 (iunie 2026) termină tranziția spre „Angular modern”: aplicații zoneless, componente OnPush implicit, Signal Forms și resources stabile, plus API-uri noi de DI (@Service, injectAsync). Mai jos sunt schimbările importante, extrase din changelog-ul oficial, fiecare cu link către pagina care o explică.
- Change detection
- zoneless implicit
- OnPush implicit
- Formulare
- Signal Forms experimental
- Signal Forms stabil
- Date async
- resource / httpResource experimental
- stabile + chain + status params
- DI
- —
@Service(),injectAsync()- Template
- regex, spread, arrow functions, instanceof,
@default never - comentarii în tag-uri,
?.→ undefined,@boundary(22.2) - HTTP
- HttpClient fără setup
- Fetch implicit
- Testare
- Vitest implicit
- getLastFixture, createDirective (22.2)
- UI
- Angular Aria
- Aria matur, WebMCP experimental
Toate schimbările, filtrabile
Filtrează după versiune și tip. „Breaking” = ce verifici la upgrade.
51 schimbări
22.2
6 schimbări- nou @boundary (developer preview)Bloc care izolează erorile de randare: @boundary { … } @error (let e = $error; let reset = $reset) { … }.
- nou TestBed.createDirective()Testezi directive fără componentă-gazdă manuală.
- nou Router: RedirectCommand aruncat, withAutoCleanupInjectors stabilPoți arunca RedirectCommand din guards/resolvers; injectorii de rută pot fi distruși automat.
- nou Template-ul poate accesa membri privateRecomandarea rămâne protected pentru membrii de template.
- nou viewChild / contentChild cu read: InjectorObții injectorul unui copil printr-o interogare.
- nou Signal Forms: câmpuri hidden permanentePlus îmbunătățiri pentru integrarea WebMCP.
22.1
3 schimbări22.0
iunie 2026 19 schimbări- breaking OnPush implicitComponentele fără changeDetection sunt OnPush. ng update adaugă Eager unde e nevoie.
- stabil Signal Forms — API publicform(), [formField], [formRoot], validatori, FormValueControl, validateHttp / validateAsync cu debounce, reloadValidation, getError().
- stabil resource / rxResource / httpResourceStabile. Noi: ResourceParamsStatus.IDLE/LOADING, ctx.chain(), cache la SSR, valori sincrone în stream.
- nou @Service()Decorator nou pentru servicii auto-provided în root. Doar inject() (fără DI în constructor). Opțiuni: autoProvided, factory.
- nou injectAsync()Servicii încărcate lazy, cu prefetch: onIdle.
- nou debounced() (experimental)Versiune debounce a unui semnal, ca Resource.
- nou Comentarii în tag-uri<div // comentariu class="x">.
- nou @defer (on idle(500))Timeout pentru idle și serviciu de idle configurabil (provideIdleServiceWith).
- nou TestBed.getLastFixture()Ultimul fixture creat.
- nou WebMCP (experimental)provideExperimentalWebMcpTools / declareExperimentalWebMcpTool — aplicația expune unelte pentru agenți AI din browser; formularele semnal pot fi expuse automat.
- breaking Fetch ca backend HTTP implicitwithFetch() e deprecat. Pentru progres la upload: withXhr(). reportProgress → reportUploadProgress / reportDownloadProgress.
- breaking paramsInheritanceStrategy: "always"Rutele copil moștenesc params și data de la toți părinții.
- breaking ?. întoarce undefined în templateCa în TypeScript. Diagnosticele nullishCoalescingNotNullable / optionalChainNotNullable pot apărea.
- breaking TypeScript 6, fără Node 20TypeScript < 6 nu mai e suportat.
- breaking Eliminate: ComponentFactoryResolver, ComponentFactory, createNgModuleRef, provideRoutes, Hammer.jsFolosește clasa direct în createComponent, createNgModule, provideRouter.
- breaking Compilator mai strictEroare pentru input-uri/output-uri legate de două ori, selectori multipli potriviți, atribute data-* nu mai leagă input-uri.
- breaking min/max din Signal Forms doar numericeNu mai acceptă string-uri.
- breaking CanMatchFn: currentSnapshot obligatoriuImplementările clasă ale CanMatch trebuie să accepte al treilea argument.
- nou Hidratare incrementală implicităwithIncrementalHydration() nu mai e necesar la SSR.
21.2
6 schimbări- nou Arrow functions și instanceof în templateitems().filter(i => i.ok), err instanceof HttpErrorResponse.
- nou @default never; — switch exhaustivUn caz uitat dintr-un union devine eroare de compilare.
- nou ChangeDetectionStrategy.EagerAlias pentru Default, pregătire pentru OnPush implicit în v22.
- nou Resource snapshotsresource.snapshot() și resourceFromSnapshots() pentru compunerea resurselor.
- nou Signal Forms: FormRoot, parse errors, SignalFormControlDirectiva [formRoot], erori de parsare pentru input-uri native, compatibilitate cu Reactive Forms.
- nou ngTemplateOutlet cu injector „outlet”[ngTemplateOutletInjector]="'outlet'".
21.1
4 schimbări- nou @switch cu cazuri multiple@case (a) @case (b) { … } — același bloc pentru mai multe valori.
- nou Spread în template[...a, ...b], { ...obj }, fn(...args).
- nou Focus pe câmp din Signal Formsfield().focus() focusează controlul legat.
- nou Router: scroll, cleanup, isActive ca semnalControale de scroll pe navigare, funcție isActive() care întoarce un semnal, wildcard-uri cu segmente.
21.0
noiembrie 2025 13 schimbări- nou Zoneless implicitAplicațiile noi nu mai includ zone.js. Change detection e declanșat de semnale, evenimente și markForCheck.
- nou Signal Forms (experimental)form(), [field] / [formField], validare prin schemă, debounce(). Devin API public în v22.
- nou Vitest ca runner implicitng test folosește Vitest prin @angular/build:unit-test. Karma e deprecat.
- nou Angular AriaDirective headless și accesibile: Accordion, Combobox, Grid, Listbox, Menu, Tabs, Toolbar, Tree.
- nou HttpClient fără setupServiciile HTTP sunt furnizate în root; provideHttpClient() doar pentru configurare.
- nou Regex în template-uriPoți scrie /^\d+$/.test(x) direct în expresii.
- nou SimpleChanges genericngOnChanges(changes: SimpleChanges<MyCmp>) — chei tipizate.
- nou Opțiuni IntersectionObserver în @defer@defer (on viewport({ rootMargin: "200px" })).
- nou Migrări ngClass → class, ngStyle → styleng g @angular/core:ngclass-to-class și ngstyle-to-style.
- breaking Type-checking pentru host bindings activ implicitErori de tip ascunse în host: {} pot apărea la build. Se poate dezactiva temporar cu typeCheckHostBindings: false.
- breaking TypeScript ≥ 5.9Versiunile mai vechi de TypeScript nu mai sunt suportate.
- breaking lastSuccessfulNavigation e semnalrouter.lastSuccessfulNavigation() trebuie apelat.
- breaking Eliminate: moduleId, interpolation custom, NgModuleFactoryOpțiuni de metadata vechi scoase din API.
Cum faci upgrade
# Upgrade pas cu pas (nu sări versiuni majore)
ng update @angular/core@21 @angular/cli@21
ng update @angular/core@22 @angular/cli@22
# Ghid interactiv cu toți pașii pentru combinația ta de versiuni:
# https://angular.dev/update-guide
# Ce face automat ng update la v22:
# - adaugă ChangeDetectionStrategy.Eager unde nu era setat changeDetection
# - păstrează HttpXhrBackend unde e nevoie (withXhr)
# - adaugă currentSnapshot în CanMatch
# - dezactivează temporar diagnosticele noi pentru ?. și ??
# - activează strictTemplates în tsconfigOrdinea recomandată după upgrade
- Build + teste verzi cu
Eageradăugat automat. - Treci starea pe semnale, feature cu feature (signals, resource).
- Scoate
Eagerdin componentele migrate și verifică (change detection). - Formulare noi direct în Signal Forms; cele vechi rămân pe Reactive până ai motiv să le muți.