Angular 7
Angular 7
INDICE
1. Angular CLI (Command Line Interface)
1.1. Installazione
1.2. Generazione nuovo Workspace
1.3. Analisi struttura iniziale Workspace
1.4. Estensione struttura iniziale Workspace
2. First Angular app
2.1. Avvio app
2.2. Analisi file index.html
2.3. Analisi file app.component.ts
2.4. Analisi file app.component.html
3. Componenti
3.1. Creazione manuale e analisi di un Componente
4. Data Binding
4.1. Binding mediante interpolazione di stringhe
4.2. Property Binding
Angular CLI
➢ Tool che semplifica la fase di creazione, sviluppo e test di un progetto
➢ Consente l’inizializzazione dell’applicazione, creazione e configurazione di moduli, servizi, direttive, pipe, etc.
NOTA: In teoria possibile la creazione e la configurazione di un’applicazione anche con la creazione a ‘mano’ di ogni singolo file
Installazione
➢ L’ Angular Workspace rappresenta l’area di lavoro all'interno della quale presenti i vari file di configurazione e le cartelle
contenenti il codice
NOTA: Possibile la personalizzazione della configurazione iniziale, mediante opzioni da linea di comando (obbligatorio nome applicazione), o
l’utilizzo di una modalità interattiva e meno personalizzabile, con selezione all'interno della shell delle opzioni per la configurazione del Workspace
Modalità non interattiva Modalità Interattiva
NOTA: Con l’opzione --dry-run elencati nella shell (ma non creati),
file e cartelle che verrebbero creati con un determinato comando.
Utile per analizzare i vari comandi senza che nessun file venga
scritto sul disco, o alcuna dipendenza venga scaricata da NPM
Analisi struttura iniziale Workspace
node_modules - Package scaricati da NPM ed elencati nelle dipendenze del file package.json
tsconfig/tslint.json - File di configurazione TypeScript e linter TSLint, utilizzato per analisi codice sorgente
app - Cartella principale dell’applicazione
assets - Immagini e altre risorse da copiare nella cartella in cui inseriti i file dell’applicazione, in seguito alla fase di build
(inizialmente al suo interno presente il file vuoto .gitkeep, convenzione utilizzata per chiedere a Git di tenere traccia di una
cartella, che se vuota invece ignorata)
favicon.ico - Favicon di default utilizzata come icona nella scheda del browser in cui aperta applicazione
main/test.ts - Punti di ingresso “entry point” dell’applicazione (con codice per l’avvio del modulo base “root module”
dell'applicazione) e dei test
polyfills.ts - Polyfill per supporto a browser meno recenti (frammenti di codice Javascript per rimediare alla mancanza di
funzionalità su browser meno recenti)
style.css - Foglio di stile con le regole globali valide per l'intera applicazione
Nella cartella app/ inizialmente presenti i file del componente base AppComponent,
elemento fondamentale su cui basata la costruzione di un'applicazione Angular
app.component.css - Regole CSS del componente (regole valide per il solo componente AppComponent)
app.component.ts - Logica del componente, essenzialmente una classe TypeScript a cui è associato il
decoratore @Component, mediante il quale è definito il componente stesso
app.module.ts - Modulo base “root module” AppModule. Un modulo Angular rappresenta un contenitore in cui
raggruppate diverse parti di un'applicazione, aventi una qualche relazione fra loro
Estensione struttura iniziale Workspace
Con l’elemento <schematic> necessario per definire i file che devono essere aggiunti o modificati nel progetto.
Ad esempio:
Componente automaticamente inserito in una nuova directory (my-new-component), nella quale raggruppati tutti i file
ad esso associati. Inoltre aggiornato il file app.module.ts, in quanto di default il nuovo componente parte del modulo
base AppModule
NOTA: Con l’opzione --dry-run non realmente generati i file, quindi lasciata intatta la cartella di lavoro, con --skipTest=true non creati i file dei test di
unità, infine se utilizzato anche --flat=true possibile non inserire i file del componente in una cartella separata, ma direttamente nella directory app/
➢ Esempio di generazione di una nuova applicazione ( o
libreria secondaria)
ng serve
NOTA: Grazie alla funzionalità di live reloading del server locale, aggiornata
automaticamente la pagina ad ogni modifica/salvataggio dei file sorgenti. In tal modo
possibile visualizzare in tempo reale lo stato corrente di un'applicazione, senza dover
aggiornare manualmente il browser
Analisi file index.html
NOTA: Dall’analisi del codice sorgente della pagina HTML, possibile notare come
Angular CLI abbia inserito 5 elementi <script>, i quali attraverso l'attributo src
importano altrettanti file Javascript esterni
Analisi file app.component.ts
➢ In Angular un'applicazione è suddivisa e strutturata in uno o più unità fondamentali e riutilizzabili, che prendono il nome di componenti
➢ Alla base di tale struttura esiste un componente radice, che nell'applicazione generata da Angular CLI prende il nome predefinito
AppComponent
➢ Ogni componente può avere altri componenti come discendenti a cui passare delle informazioni, viceversa questi ultimi possono notificare il
componente genitore se qualche proprietà in essi contenuta ha subito delle modifiche
➢ Una applicazione Angular può essere scomposta in più componenti, i quali visivamente vanno ad occupare una
porzione dello schermo, mostrando delle informazioni e permettendo all'utente di interagire con l'applicazione
➢ Oltre ai componenti, anche altre entità (direttive, servizi, pipe etc.) concorrono alla formazione di una applicazione
Angular, e tutti questi elementi sono mantenuti ed organizzati all'interno dei cosiddetti moduli Angular,
essenzialmente un meccanismo che permette di raggruppare componenti, direttive, servizi e pipe che hanno una
qualche relazione fra loro
➢ Un'applicazione può disporre di un numero indefinito di moduli, ma presenta sempre un unico modulo base (root
module) che nell'esempio è rappresentato dall’ AppModule
➢ Un modulo è definito attraverso una classe alla quale è
applicato il decoratore @NgModule, il quale riceve
come argomento un oggetto di metadata con delle
proprietà specifiche, utilizzate per la definizione del
modulo. Nello specifico quattro array
❏ declarations: Lista di componenti, direttive e pipe che fanno parte di un modulo. Ogni entità deve appartenere ad un solo modulo, altrimenti
emesso un errore dal compilatore. Le classi presenti nell'array risultano visibili all'interno del modulo, ma invisibili ai componenti di altri
moduli a meno che non vengano esplicitamente esportate dal modulo corrente (il quale deve poi essere elencato nell'array imports del
modulo che intende accedere a tali classi)
❏ bootstrap: Solitamente unico componente, di norma AppComponent, componente base creato durante la fase di avvio dell'applicazione
Componenti
➢ Per la definizione di un componente, necessaria la creazione dei seguenti file:
❏ Un file TypeScript, con all’interno una classe contenente proprietà e i metodi propri del componente
❏ Un secondo file TypeScript, contenente il codice per il test del componente
❏ Un file HTML, contenente il template per la descrizione della struttura del componente
❏ Un file CSS, contenente le regole per stabilire l’aspetto del componente
➢ La definizione di un componente, possibile attraverso Angular CLI, con la generazione automatica dei file necessari,
oppure manualmente con la creazione di ogni singolo file, come mostrato nelle slide successive
Creazione manuale e analisi di un Componente
NOTA: Per convenzione, i file relativi ad un componente presentano un nome del tipo
nome-componente.component.estensione
2. Definizione del nuovo componente all’interno del file
esempio-componente.component.ts
selector: Indicazione del selettore necessario per l’inserimento del componente corrente all’interno del template di un’altro componente (in
tal caso, utilizzato il prefisso predefinito 'app', in teoria anche personalizzabile)
template/templateUrl: Definizione diretta del template HTML del componente mediante stringa (funzionalità ES2015 con la quale possibile
distribuire un template su più righe), o indicazione mediante templateUrl del percorso relativo al file .html contenente il template HTML
styles/styleUrls: Definizione diretta dello stile del componente mediante stringa, o indicazione mediante styleUrls del percorso relativo al
file .css
NOTA: Per template o fogli di stile lunghi e complessi, consigliato l’utilizzo di file esterni con templateUrl e styleUrls
3. Definizione del template HTML, dunque aggiunta
del file esempio-componente.componet.html e/o
foglio di stile, dunque aggiunta del file
esempio-componente.component.css
NOTA: In tal caso, aggiunto il solo file per il foglio di stile, in quanto
il template HTML inserito in maniera diretta all’interno del
decoratore @Componet
4. Aggiunta del componente EsempioComponenteComponent
come discendente del componente AppComponent, dunque
inserimento dell’elemento app-esempio-componente all’interno
del template di AppComponent
ng serve --open
➢ Le regole CSS relative a un componente (definite attraverso la
proprietà styles o presenti nei file indicati da styleUrls), hanno validità
solo all'interno del template del componente, dunque sono applicate
solo agli elementi presenti nel template e non sono ereditate da
alcun componente discendente
NOTA: Per la scrittura di template, mediante il linguaggio HTML, possibile utilizzare quasi tutti gli elementi HTML standard ad eccezione
dell'elemento <script>, vietato al fine di eliminare rischi di attacchi con iniezione di codice, e degli elementi <html> <body> e <base>, i quali
sarebbero di poca utilità
Binding mediante interpolazione di stringhe