Impara da zero il framework di Google in TypeScript: componenti, direttive, servizi, dependency injection, routing, HTTP, Signals, control flow e SSR. 32 lezioni con esempi di codice.
Corso Angular
Angular è una piattaforma e un framework per costruire applicazioni web a pagina singola (SPA) usando HTML e TypeScript. È sviluppato e mantenuto da Google.
Perché scegliere Angular?
🏗️ Framework completo: routing, form, HTTP e testing già inclusi
📐 Struttura solida: ideale per applicazioni grandi ed enterprise
🔷 TypeScript: tipizzazione statica che previene molti errori
⚡ Reattività moderna: con i Signals e il change detection ottimizzato
Un componente Angular
Esempio di codice
Angular usa TypeScript e si compila con la Angular CLI. Nel pannello laterale trovi i link per provare il codice online su StackBlitz.
Introduzione ad Angular
Angular è stato creato da Google nel 2016 (la riscrittura completa di AngularJS del 2010). Oggi è uno dei framework frontend più usati nelle grandi aziende.
Concetti fondamentali
Componenti: i mattoni dell'interfaccia utente
Template: l'HTML con la sintassi Angular
Direttive: estendono l'HTML con comportamenti
Servizi: logica riutilizzabile e condivisa
Dependency Injection: gestione automatica delle dipendenze
Moduli / Standalone: organizzazione del codice
Angular vs AngularJS
AngularJS (1.x)
Angular (2+)
Linguaggio
JavaScript
TypeScript
Architettura
MVC
Componenti
Performance
Buona
Eccellente
Prerequisiti
Conoscenza di HTML e CSS
Basi di JavaScript e TypeScript
Concetti di programmazione a oggetti
Iniziare con Angular
Per sviluppare con Angular servono Node.js e la Angular CLI.
Installazione
Esempio di codice
Crea un nuovo progetto
Esempio di codice
Il comando ng serve avvia il server di sviluppo su http://localhost:4200 con ricarica automatica.
Struttura del progetto
Esempio di codice
La Prima App Angular
Creiamo un semplice componente che mostra un saluto dinamico.
Il componente
Esempio di codice
Il punto di ingresso (main.ts)
Esempio di codice
Standalone Components
Dalle versioni recenti, Angular usa i componenti standalone: non serve più dichiararli in un NgModule. Si importano direttamente dove servono, semplificando la struttura del progetto.
Template in Angular
Il template è l'HTML del componente arricchito con la sintassi Angular.
Interpolazione
Esempio di codice
Template inline vs file esterno
Esempio di codice
Espressioni nei template
Nei template puoi usare espressioni, ma non istruzioni complesse:
Esempio di codice
Componenti Angular
I componenti sono i blocchi fondamentali di un'app Angular. Ognuno controlla una porzione di schermo.
Anatomia di un componente
Esempio di codice
Usare un componente in un altro
Esempio di codice
Generare un componente con la CLI
Esempio di codice
Data Binding in Angular
Il data binding sincronizza i dati tra la classe del componente e il template. Angular offre quattro tipi.
1. Interpolazione (classe → template)
Esempio di codice
2. Property binding (classe → template)
Esempio di codice
3. Event binding (template → classe)
Esempio di codice
4. Two-way binding (bidirezionale)
Esempio di codice
La sintassi [(ngModel)] è chiamata "banana in a box" 🍌📦: combina property binding [ ] ed event binding ( ).
Direttive Angular
Le direttive estendono o modificano gli elementi HTML. Ci sono tre tipi.
Direttive strutturali (cambiano il DOM)
Esempio di codice
Direttive di attributo (cambiano l'aspetto)
Esempio di codice
Direttive personalizzate
Esempio di codice
Eventi in Angular
Angular gestisce gli eventi del DOM con la sintassi event binding(evento).
Eventi comuni
Esempio di codice
L'oggetto $event
Esempio di codice
Key events specifici
Esempio di codice
Rendering Condizionale
Angular permette di mostrare contenuto in base a condizioni.
*ngIf
Esempio di codice
*ngIf con else
Esempio di codice
Nuovo control flow @if (Angular 17+)
Esempio di codice
[hidden] vs *ngIf
Esempio di codice
Liste in Angular
Per renderizzare liste si usa la direttiva *ngFor.
*ngFor di base
Esempio di codice
Con indice e variabili
Esempio di codice
trackBy per le performance
Esempio di codice
Esempio di codice
Nuovo control flow @for (Angular 17+)
Esempio di codice
Form in Angular
Angular offre due approcci ai form: Template-driven e Reactive.
Template-driven (con ngModel)
Esempio di codice
Reactive Forms (più potenti)
Esempio di codice
Usa i Reactive Forms per form complessi con validazione avanzata.
Routing in Angular
Il Router gestisce la navigazione tra le viste in una SPA.
Configurazione delle rotte
Esempio di codice
Router outlet e link
Esempio di codice
Navigazione da codice
Esempio di codice
Leggere i parametri
Esempio di codice
Servizi e Dependency Injection
I servizi contengono logica riutilizzabile (es. accesso ai dati). La Dependency Injection (DI) li fornisce automaticamente ai componenti.
Creare un servizio
Esempio di codice
Iniettare un servizio in un componente
Esempio di codice
Generare un servizio con la CLI
Esempio di codice
HTTP Client in Angular
L'HttpClient permette di comunicare con API e server remoti.
Configurazione (main.ts)
Esempio di codice
Richiesta GET
Esempio di codice
POST, PUT, DELETE
Esempio di codice
Le richieste HTTP restituiscono Observable (RxJS): ci si iscrive con .subscribe().
Pipe in Angular
Le pipe trasformano i dati direttamente nel template, con la sintassi valore | pipe.
Pipe integrate
Esempio di codice
Concatenare pipe
Esempio di codice
Pipe personalizzata
Esempio di codice
Esempio di codice
Lifecycle Hooks
I lifecycle hooks sono metodi chiamati da Angular in momenti precisi della vita del componente.
I principali hook
Hook
Quando viene chiamato
ngOnInit
Dopo l'inizializzazione del componente
ngOnChanges
Quando cambiano gli @Input
ngDoCheck
A ogni change detection
ngAfterViewInit
Dopo l'init della vista
ngOnDestroy
Prima della distruzione
Esempio
Esempio di codice
ngOnInit è l'hook più usato: è il posto giusto per caricare i dati iniziali (es. chiamate HTTP).
Styling in Angular
Angular incapsula gli stili: i CSS di un componente valgono solo per quel componente.
Stili del componente
Esempio di codice
File di stile esterno
Esempio di codice
Binding dinamico di classi e stili
Esempio di codice
View Encapsulation
Per impostazione predefinita Angular usa ViewEncapsulation.Emulated: aggiunge attributi unici per isolare i CSS, evitando conflitti tra componenti.
App Bootstrap
Il bootstrap è il processo che avvia l'applicazione Angular.
main.ts — il punto di ingresso
Esempio di codice
app.config.ts — configurazione
Esempio di codice
index.html
Esempio di codice
Con i componenti standalone, bootstrapApplication() ha sostituito il vecchio approccio basato su NgModule e platformBrowserDynamic().
Control Flow (Angular 17+)
Dalla versione 17, Angular introduce un nuovo control flow integrato nel template, più leggibile delle direttive *ngIf e *ngFor.
@if / @else
Esempio di codice
@for
Esempio di codice
L'espressione track è obbligatoria e migliora le performance.
@switch
Esempio di codice
Vantaggi
Sintassi più chiara e vicina a JavaScript
Migliori performance (non servono direttive)
track ed @empty integrati
Signals
I Signals (Angular 16+) sono il nuovo sistema di reattività: contenitori di valori che notificano automaticamente i cambiamenti.
Creare e leggere un signal
Esempio di codice
Signal in un componente
Esempio di codice
Computed signals
Esempio di codice
I Signals rendono il change detection molto più efficiente.
Change Detection
Il change detection è il meccanismo con cui Angular aggiorna il DOM quando i dati cambiano.
Come funziona
Angular controlla i componenti e, se rileva cambiamenti nei dati, aggiorna la vista. Di default usa la strategia Default, che controlla tutto l'albero dei componenti.
Strategia OnPush
Esempio di codice
Con OnPush, Angular controlla il componente solo quando:
Cambia un riferimento di un @Input
Si verifica un evento nel componente
Cambia un Signal usato nel template
Controllo manuale
Esempio di codice
OnPush + Signals è la combinazione consigliata per le massime performance.
Componenti Dinamici
I componenti dinamici vengono creati e inseriti a runtime, non in modo statico nel template.
Con NgComponentOutlet
Esempio di codice
Esempio di codice
Con ViewContainerRef
Esempio di codice
Utili per modali, widget configurabili e contenuti caricati in base ai dati.
Dependency Injection Avanzata
La DI di Angular è molto flessibile e supporta token, provider personalizzati e gerarchie.
InjectionToken
Esempio di codice
Tipi di provider
Esempio di codice
Iniettare con inject()
Esempio di codice
DI gerarchica
Un provider definito in un componente è disponibile solo per quel componente e i suoi figli, sovrascrivendo eventuali provider di livello superiore.
Router Avanzato
Funzionalità avanzate del Router per app complesse.
Lazy loading
Esempio di codice
Il lazy loading carica il codice solo quando serve, riducendo il bundle iniziale.
Route Guards
Esempio di codice
Resolver (precarica dati)
Esempio di codice
Query params
Esempio di codice
HTTP Interceptors
Gli interceptor intercettano tutte le richieste e risposte HTTP, ideali per autenticazione, logging e gestione errori.
Creare un interceptor (funzionale)
Esempio di codice
Registrare l'interceptor
Esempio di codice
Interceptor per gestione errori
Esempio di codice
Gli interceptor si eseguono in ordine per ogni richiesta uscente.
Form Avanzati
I Reactive Forms permettono validazione complessa, form dinamici e controllo totale.
FormBuilder e validatori
Esempio di codice
Mostrare gli errori
Esempio di codice
FormArray (campi dinamici)
Esempio di codice
Validatore personalizzato
Esempio di codice
State Management
La gestione dello stato centralizza i dati condivisi tra componenti.
Stato con un servizio + Signals
Esempio di codice
Usare lo store
Esempio di codice
Librerie dedicate
Per app molto grandi si usano librerie come NgRx (pattern Redux) o NGXS. Per la maggior parte dei casi, un servizio con Signals è sufficiente.
Animazioni in Angular
Angular offre un sistema di animazioni dichiarativo basato su stati e transizioni.
Configurazione
Esempio di codice
Definire un'animazione
Esempio di codice
Animazioni di lista
Con query() e stagger() si animano gli elementi di una lista in sequenza, per effetti fluidi all'ingresso.
Testing in Angular
Angular include strumenti per i test: Jasmine (framework) e Karma o Vitest (test runner).
Test di un componente
Esempio di codice
Test di un servizio
Esempio di codice
Eseguire i test
Esempio di codice
Si usano anche end-to-end test con strumenti come Playwright o Cypress.
Sicurezza in Angular
Angular include protezioni integrate contro le vulnerabilità web più comuni.
Protezione XSS automatica
Esempio di codice
';
}
innerHTML e sanitizzazione
Esempio di codice
Buone pratiche di sicurezza
✅ Non usare bypassSecurityTrust... su input non fidati
✅ Validare sempre i dati lato server (non solo nel client)
✅ Usare HttpClient che protegge da XSRF/CSRF
✅ Usare la Content Security Policy (CSP)
✅ Mantenere Angular e le dipendenze aggiornate
Protezione XSRF
Esempio di codice
SSR e Hydration
Il Server-Side Rendering (SSR) genera l'HTML sul server, migliorando SEO e velocità di caricamento iniziale.
Aggiungere SSR a un progetto
Esempio di codice
Questo configura il rendering lato server con un server Express.
Vantaggi dell'SSR
🔍 SEO migliore: i motori di ricerca vedono l'HTML completo
⚡ First Contentful Paint più veloce
📱 Performance su dispositivi lenti
Hydration
La hydration è il processo con cui Angular "riprende" sul client l'HTML generato dal server, senza ricostruirlo da zero.
Esempio di codice
Incremental Hydration (Angular 19+)
Esempio di codice
L'SSR con hydration combina i vantaggi del rendering server (SEO, velocità) con l'interattività di una SPA.
Conclusione
Complimenti! 🎉 Hai completato il corso di Angular completo e gratuito in italiano: dai componenti e il data binding, al routing e i servizi, fino a RxJS, lazy loading, SSR e le ultime funzionalità di Angular 17+. Ora hai le basi per costruire applicazioni enterprise-grade.
Il modo migliore per consolidare Angular è costruire un progetto reale: crea una SPA con routing, chiamate HTTP e gestione dello stato. Rifai gli esempi, esplora la documentazione ufficiale e sperimenta con Angular Material.
E ora?
Hai già una solida base in TypeScript: il passo successivo naturale è approfondire React per confrontare i due approcci ai framework moderni, oppure tornare a esplorare tutti gli altri corsi disponibili. Se vuoi un percorso guidato personalizzato, posso seguirti con ripetizioni di informatica in presenza a Roma.