Angular: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
mNessun oggetto della modifica
Etichette: Modifica visuale Modifica da mobile Modifica da web per mobile
 
(73 versioni intermedie di 32 utenti non mostrate)
Riga 1:
{{Software
| Nome = Angular
| Logo = Angular<!-- fullsu colorWikidata logo.svg-->
| Sviluppatore = [[Google (azienda)|Google]]
| DataPrimaVersione = {{Data|14|09|2016}}
| UltimaVersione = 5.x<!-- su Wikidata -->
|DataUltimaVersione = <!-- su Wikidata -->
| SistemaOperativo = [[Multipiattaforma]], [[Browser]] moderni
|UltimaVersioneBeta =
| Linguaggio = [[TypeScript]]
|DataUltimaVersioneBeta = {{Data|07|04|2021|df=yes}}
| Genere = [[open source]] JavaScript framework, [[Single-page_application]]
|SistemaOperativo = multipiattaforma
| Licenza = [[licenza MIT]]
|NotaSistemaOperativo = {{sp}}(su [[web browser]])
| Lingua = Inglese
|Linguaggio =
| SoftwareLibero = Sì
|Genere = web framework
| SitoWeb = [https://angular.io/ Sito ufficiale]
|Licenza = [[open source]] [[licenza MIT]]
|Lingua = Inglese
|SoftwareLibero = Sì
|SitoWeb = <!-- su Wikidata -->
}}
'''Angular''' (noto anche come '''Angular 2''') è un [[framework]] [[open source]] per lo sviluppo di [[Single-page application]] con [[licenza MIT]]<ref>{{Cita pubblicazione|data=2018-01-18|titolo=angular: One framework. Mobile & desktop|editore=Angular|accesso=2018-01-18|url=https://github.com/angular/angular}}</ref>, evoluzione di [[AngularJS]]. Sviluppato principalmente da [[Google (azienda)|Google]], la sua prima [[Release (informatica)|release]] è avvenuta il 14 settembre 2016<ref>{{Cita web|url=https://angularjs.blogspot.co.uk/2016/09/angular2-final.html|titolo=Angular, version 2: proprioception-reinforcement|sito=angularjs.blogspot.co.uk|accesso=2018-01-18|dataarchivio=18 gennaio 2018|urlarchivio=https://web.archive.org/web/20180118181923/http://angularjs.blogspot.co.uk/2016/09/angular2-final.html|urlmorto=sì}}</ref>.
 
'''Angular 2+''' (o semplicemente '''Angular''') è una piattaforma<ref>{{Cita web|url=https://angular.io/features|titolo=Angular Docs|sito=angular.io|accesso=2018-01-18}}</ref> [[open source]] per lo sviluppo di [[applicazione web|applicazioni web]] con [[licenza MIT]]<ref>{{Cita pubblicazione|data=2018-01-18|titolo=angular: One framework. Mobile & desktop|editore=Angular|accesso=2018-01-18|url=https://github.com/angular/angular}}</ref>. È l'evoluzione di [[AngularJS]]. Angular è stato sviluppato principalmente da [[Google (azienda)|Google]], la sua prima release è avvenuta il 14 settembre 2016<ref>{{Cita web|url=http://angularjs.blogspot.co.uk/2016/09/angular2-final.html|titolo=Angular, version 2: proprioception-reinforcement|sito=angularjs.blogspot.co.uk|accesso=2018-01-18}}</ref>.
 
==Caratteristiche==
[[File:Architecture of an Angular 2 application.png|miniatura|Architettura di un'applicazione fatta con Angular|300x300px]]
Angular è stato completamente riscritto rispetto a AngularJS e le due versioni non sono compatibili. Il linguaggio di programmazione usato per AngularJS è [[JavaScript]] mentre quello di Angular è [[TypeScript]]<ref>{{Cita web|url=https://medium.com/@angularminds/comparison-between-angular-1-vs-angular-2-vs-angular-4-62fe79c379e3|titolo=Major differences between Angular 1 vs Angular 2 vs Angular 4|autore=Angular Minds|sito=Medium|data=2017-08-04|accesso=2018-01-18}}</ref>.
Angular è stato concepito da Google come riscrittura da zero di AngularJS, risultando in un prodotto completamente diverso e non compatibile. A differenza di AngularJS, che supporta solo il [[Linguaggio di programmazione|linguaggio]] [[JavaScript]], Angular è scritto in [[TypeScript]]<ref>{{Cita web|url=https://www.angularminds.com/blog/article/comparison-difference-between-angular1-vs-angular2-vs-angular4.html|titolo=Major differences between Angular 1 vs Angular 2 vs Angular 4|autore=Angular Minds|sito=Medium|data=2017-08-04|accesso=2018-01-18}}</ref>.
 
Le applicazioni sviluppate in Angular sono Single-page application, pertanto vengono eseguite interamente dal [[web browser]] dopo essere state scaricate dal [[web server]]. QuestoAngular comporta il risparmio di dover spedire indietromantiene la pagina web al web-server ogni volta che c'è una richiesta di azione da parte dell'utente. Il codice generato da Angular giracompatibilità sucon tutti i principali web browser moderni, qualicome ad esempio[[Google Chrome|Chrome]], Internet[[Microsoft ExplorerEdge]], [[Opera (browser)|Opera]], [[Firefox]], [[Safari (browser)|Safari]] ed altri<ref>{{Cita web|url=https://angular.io/guide/browser-support|titolo=Angular Docs|sito=angular.io|accesso=2018-01-18}}</ref>.
 
=== Architettura a componenti ===
Angular è stato progettato per fornire un strumento facile e veloce per sviluppare applicazioni che girano su qualunque piattaforma inclusi [[smartphone]] e [[tablet]]. Infatti le applicazioni web in Angular in combinazione con il [[toolkit]] open source Bootstrap diventano ''[[design responsivo|responsive]]'', ossia il design del sito web si adatta in funzione alle dimensioni del dispositivo utilizzato<ref>{{Cita web|url=https://ng-bootstrap.github.io/#/home|titolo=Angular powered Bootstrap|sito=ng-bootstrap.github.io|lingua=en|accesso=2018-01-18}}</ref>.
Angular utilizza un'architettura basata sui componenti che permette agli sviluppatori di costruire interfacce e parti di interfaccia modulari e riutilizzabili.
 
Ciascun componente incapsula il proprio HTML, CSS e TypeScript, rendendo possibile gestire e testare in maniera indipendente le singole parti di un'applicazione.
È in corso di sviluppo un altro toolkit di design responsivo, Flex Layout, più semplice da usare rispetto a Bootstrap e concepito appositamente per Angular<ref>{{Cita pubblicazione|data=2018-01-18|titolo=flex-layout: Provides HTML UI layout for Angular applications; using Flexbox and a Responsive API|editore=Angular|accesso=2018-01-18|url=https://github.com/angular/flex-layout}}</ref>.
 
Ogni componente è composto da<ref>{{Cita web|url=https://angular.dev/guide/components|titolo=Anatomy of a component}}</ref>:
Altro toolkit che facilita la progettazione in Angular è Angular Material, una serie di componenti che permette di creare una pagina web molto velocemente: con l'utilizzo combinato di Flex Layout ed Angular Material si possono creare siti e applicazioni web responsive molto avanzate basate su Angular<ref>{{Cita web|url=https://material.angular.io/|titolo=Angular Material|sito=material.angular.io|accesso=2018-01-18}}</ref>.
 
* un file TypeScript contenente una classe che definisce la logica di funzionamento;
== Principi di base<ref>{{Cita web|url=https://angular.io/guide/architecture|titolo=Angular Docs|sito=angular.io|accesso=2018-01-18}}</ref> ==
* un file HTML che specifica il template (ovvero quello che viene visualizzato sulla pagina);
Un'applicazione Angular è composta in da una serie di moduli, chiamati ''NgModule''; uno di questi è il modulo principale (di solito chiamato ''AppModule'') il quale inizia l'applicazione.
* un selettore, che serve a definire il nome con cui questo componente viene incluso in altri componenti;
* opzionalmente, un file CSS che definisce lo stile specifico per quel componente.
Angular supporta la definizione di template, stili e logica in un singolo file TypeScript (''single file component'').
 
=== Data binding ===
Ciascun NgModule è formato da due parti: un ''Template'' che definisce la grafica della pagina e un ''Component'', responsabile della gestione e dell'interazione applicativa con la parte grafica. Per esempio, in una pagina composta da textbox e un pulsante, questi elementi vengono definiti nel Template, mentre il Component viene attivato quando viene premuto il pulsante in modo da eseguire l'operazione associata come per esempio la lettura dei contenuti delle textbox e l'invio di questi ad un server per il loro salvataggio in un database.
Angular support il ''two-way data binding'', ovvero la possibilità di mantenere sincronizzato il valore sottostante di un dato e la sua rappresentazione nell'interfaccia grafica. Il framework fornisce delle primitive per garantire che una variazione del dato sottostante venga immediatamente riportata sull'interfaccia, o che un'interazione da parte dell'utente venga riportata sul dato sottostante, ad esempio nel caso di [[Form|form html]].<ref>{{Cita web|url=https://angular.dev/guide/templates/two-way-binding/|titolo=Two-way binding|sito=angular.dev|lingua=en|accesso=2024-09-20}}</ref>
 
=== Dependency injection ===
Un'altra componente molto importante nello sviluppo di un'applicazione Angular sono i cosiddetti ''Service'', ovvero chiamate [[Representational State Transfer|REST]] Web [[Application programming interface|API]] che vengono definite nei Component per far interagire l'applicazione con un database.
{{Vedi anche|Dependency injection}}
Angular incorpora un sistema di [[Dependency injection]] che permette di gestire e iniettare facilmente le dipendenze dei componenti, promuovendo la modularità delle applicazioni e facilitando il testing.
 
==Voci= correlateDirettive ===
Angular estende l'HTML attraverso le direttive, attributi HTML aggiuntivi che permettono di modificare il comportamento o l'aspetto degli elementi del [[Document Object Model|DOM]].
*[[AngularJS]]
 
*[[Design responsivo]]
=== Routing ===
*[[Bootstrap (informatica)|Bootstrap]]
Angular include un router che permette agli sviluppatori di definire e gestire gli stati delle applicazioni e i percorsi di navigazione, rendendo possibile costruire single page applications con strutture ad albero complesse.
 
=== Angular CLI ===
Il progetto Angular include la Angular CLI (''[[command line interface]]''), uno strumento da linea di comando che facilita la creazione e lo sviluppo di applicazioni Angular. Per esempio:
 
* il comando <code>ng new</code> permette di creare una nuova applicazione Angular;
* il comando <code>ng generate</code> permette di generare scheletri per i vari componenti di cui è composta un'applicazione:
* il comando <code>ng serve</code> permette di avviare l'applicazione per lo sviluppo locale.
 
== Storia ==
Angular nasce come riscrittura totale di AngularJS da parte di Google. È stato annunciato alla ng-Europe Conference del 22-23 ottobre 2014.<ref>{{Cita web|url=https://web.archive.org/web/20180430113923/https://2015.ngeurope.org/#schedule|titolo=ng-europe - The first AngularJS European conference in Paris, France.|sito=web.archive.org|data=2018-04-30|accesso=2024-09-20}}</ref> La prima versione stabile è stata rilasciata il 14 settembre 2016, dopo una versione in anteprima per gli sviluppatori (aprile 2015), una [[versione beta]] (dicembre 2014) ed una [[release candidate]] (maggio 2016).
 
Dalla versione 9 in poi il motore di [[rendering]] di default è Ivy, ed è deprecato il predecessore View Engine.<ref>{{Cita web|url=https://v12.angular.io/guide/ivy|titolo=Angular|sito=v12.angular.io|accesso=2024-09-20}}</ref> View Engine è stato poi rimosso completamente con la versione 13.
 
=== Nome ===
Inizialmente ci si riferiva ad Angular come "Angular 2", essendo di fatto l'evoluzione di Angular 1.0 (comunemente noto come AngularJS). L'adozione da parte del team di sviluppo del [[Versione (sviluppo software)|versionamento semantico]] ha però spinto Google a standardizzare "AngularJS" come nome per tutte le versioni precedenti alle 2, e Angular per quelle dalla 2 in poi, in modo da distinguere nettamente e da rimuovere qualsiasi ambiguità tra la versione originale e la riscrittura.<ref>{{Cita web|url=https://web.archive.org/web/20170204142402/http://angularjs.blogspot.com/2017/01/branding-guidelines-for-angular-and.html|titolo=Angular: Branding Guidelines for Angular and AngularJS|autore=Stephen Fluin|sito=Angular|data=2017-01-27|accesso=2024-09-20}}</ref>
 
=== Versioni ===
{| class="wikitable"
|+
!Versione
!Data di pubblicazione
!Caratteristiche principali
!Note
|-
|Angular 2
|14 settembre 2016
|Release iniziale.
|
|-
|Angular 4
|23 marzo 2017
|Aggiunto il comando <code>ng update</code>
|[[Retrocompatibilità|Retrocompatibile]] con Angular 2.
|-
|Angular 4.3
|18 luglio 2017
|Introdotto l'HttpClient.
|
|-
|Angular 5
|1 novembre 2017
|Supporto per le [[Progressive Web App]].
|
|-
|Angular 6
|4 maggio 2018
|Supporto sperimentale per gli elementi html custom.
|
|-
|Angular 7
|18 ottobre 2018
|Aggiornamenti ad Angular Material e al CDK, migliorate le performance dell'applicazione compilata.
|
|-
|Angular 8
|28 maggio 2019
|Anteprima di Angular Ivy, caricamento differenziale per il codice dell'applicazione, import dinamici delle rotte, ''[[web worker]]'', supporto di TypeScript 3.4.
|
|-
|Angular 9
|6 febbraio 2020
|[[Compilatore AOT|Compilazione AOT]] con motore Ivy abilitata di default.
|
|-
|Angular 10
|24 giugno 2020
|Nuovo componente per la selezione degli intervalli di date (Date Range Picker) nella libreria Material UI.
|
|-
|Angular 11
|11 novembre 2020
|Supporto sperimentale a [[Webpack]] 5.
|
|-
|Angular 12
|12 maggio 2021
|Deprecato il supporto per [[Internet Explorer 11]].
|
|-
|Angular 13
|4 novembre 2021
|Rimosso il motore di rendering deprecato View Engine.
|
|-
|Angular 14
|2 giugno 2022
|Form tipizzati, componenti ''standalone'', nuove primitive per l'Angular CDK (component developer kit).
|
|-
|Angular 15
|18 novembre 2022
|Componenti ''standalone'', ''directive composition''.<ref>{{Cita web|lingua=en|autore=Minko Gechev|url=https://blog.angular.dev/angular-v15-is-now-available-df7be7f2f4c8|titolo=Angular v15 is now available!|sito=Medium|data=2022-11-21|accesso=2024-09-20}}</ref>
|
|-
|Angular 16
|3 maggio 2023
|''Partial hydration'' per il ''server side rendering'' (Angular Universal), supporto sperimentale ai test Jet, sistema di sviluppo locale basato su Esbuild.
|
|-
|Angular 17
|8 novembre 2023
|Nuovo ''build system'', nuova sintassi per il [[controllo di flusso]] nei template, nuovo sito per i tutorial e la documentazione.<ref>{{Cita web|lingua=en|autore=Minko Gechev|url=https://blog.angular.dev/introducing-angular-v17-4d7033312e4b|titolo=Introducing Angular v17|sito=Medium|data=2023-11-30|accesso=2024-09-20}}</ref>
|
|-
|Angular 18
|22 maggio 2024
|''Zoneless change detection'' sperimentale e miglioramenti del ''server side rendering''.<ref>{{Cita web|url=https://blog.angular.dev/angular-v18-is-now-available-e79d5ac0affe|titolo=Angular v18 is now available!|autore=Minko Gechev|sito=Medium|data=2024-05-23|lingua=en|accesso=2024-09-20}}</ref>
|
|-
|Angular 19
|19 novembre 2024
|Le direttive, i componenti e le pipe sono diventate ''standalone'' di default.<ref>{{Cita web|lingua=en|autore=Minko Gechev|url=https://blog.angular.dev/meet-angular-v19-7b29dfd05b84|titolo=Meet Angular v19|data=19 novembre 2024|accesso=28 gennaio 2025}}</ref>
|
|}
 
=== Supporto e pianificazione delle versioni ===
Tutte le versioni major sono supportate per 18 mesi. Questi 18 mesi consistono in 6 mesi di supporto attivo, durante i quali vengono effettuati aggiornamenti regolari, e in 12 mesi di supporto a lungo termine (LTS), durante i quali vengono effettuati solo gli aggiornamenti critici e di sicurezza.
 
In generale una nuova major viene pubblicata circa ogni 6 mesi, e per ogni major vengono pubblicate da 1 a 3 versioni minor.<ref>{{Cita web|url=https://angular.dev/reference/releases/|titolo=Versioning and release • Angular|sito=angular.dev|lingua=en|accesso=2024-09-20}}</ref>
 
== Esempi ==
 
=== Componente ===
Di seguito un componente ''Counter'' che permette di visualizzare un contatore e di agire sul suo stato. Il componente e definito in tre file diversi: <code>counter.ts</code>, <code>counter.html</code>, <code>counter.css</code>.<syntaxhighlight lang="typescript" line="1">
// File: counter.ts
import { Component, signal } from '@angular/core';
import { CommonModule } from '@angular/common';
 
@Component({
selector: 'app-counter',
standalone: true,
imports: [CommonModule],
templateUrl: './counter.html',
styleUrl: './counter.css'
})
export class Counter {
count = signal(0);
 
increment() {
this.count.update(c => c + 1);
}
 
decrement() {
this.count.update(c => c - 1);
}
}
 
 
// File: counter.html
<div class="counter-container">
<h2>Counter: {{ count() }}</h2>
<div class="button-container">
<button (click)="increment()">+</button>
<button (click)="decrement()">-</button>
</div>
</div>
 
 
// File: counter.css
.counter-container {
font-family: Arial, sans-serif;
text-align: center;
margin: 20px;
}
 
.button-container {
margin-top: 10px;
}
 
button {
font-size: 18px;
margin: 0 5px;
padding: 5px 10px;
cursor: pointer;
}
</syntaxhighlight>
 
=== Single file component ===
Lo stesso componente in versione single file è riportato di seguito:<syntaxhighlight lang="typescript" line="1">
// File: counter.ts
import { Component } from '@angular/core';
 
@Component({
selector: 'app-counter',
template: `
<div class="counter-container">
<h2>Counter: {{ count() }}</h2>
<div class="button-container">
<button (click)="increment()">+</button>
<button (click)="decrement()">-</button>
</div>
</div>
`,
styles: [`
.counter-container {
font-family: Arial, sans-serif;
text-align: center;
margin: 20px;
}
.button-container {
margin-top: 10px;
}
button {
font-size: 18px;
margin: 0 5px;
padding: 5px 10px;
cursor: pointer;
}
`]
})
export class Counter {
count = signal(0);
 
increment() {
this.count.update(c => c + 1);
}
 
decrement() {
this.count.update(c => c - 1);
}
}
 
</syntaxhighlight>In un file html di un altro component, a questo punto, è possibile incorporare il componente dichiarato precedentemente inserendo nel template il selettore del componente: <syntaxhighlight lang="html">
<app-counter></app-counter>
</syntaxhighlight>
 
==Note==
<references />
 
==Voci correlate==
*[[AngularJS]]
*[[Single-page application]]
*[[Dependency injection]]
*[[TypeScript]]
 
==Altri progetti==
{{interprogetto}}
 
== Collegamenti esterni ==
* {{Collegamenti esterni}}
*[https://angular.io/ Sito ufficiale]
 
*[https://github.com/angular/angular Repository]
{{Framework per applicazioni web}}
*[https://material.angular.io/ Angular Material]
{{Portale|informatica|internet}}
*[https://github.com/angular/flex-layout/wiki Angular Flex Layout]