SlideShare una empresa de Scribd logo
1 de 49
AngularJS
Corso Base
AngularJS
Corso base AngularJS Beniamino Ferrari 2
Introduzione
● AngularJS è un framework lato client ideato per
applicazioni web che reinterpreta l’HTML.
● AngulaJS è un framework per scrivere applicazioni Single
Page (SPA). È solo uno dei molti framework JavaScript per lo
sviluppo di SPA, ma è ampiamente utilizzato, perché permette
un’architettura MVW (Model - View - Whatever).
Corso base AngularJS Beniamino Ferrari 3
Cos’è MVW?
● MVW vuol dire che il pattern architetturale può essere MVC o
MVVM
● MVC (Model - View - Controller) è ben noto da molto tempo ed
è il modello principale per lo sviluppo di codice lato server per
applicazioni web.
● MVVM è relativamente nuovo e si sta evolvendo con le
applicazioni per dispositivi mobili, ma è anche passato a SPA.
Corso base AngularJS Beniamino Ferrari 4
MVC con AngularJS (1)
● Per iniziare, il modello di progettazione MVC non è specifico di
AngularJS ma è usato in molti altri linguaggi di
programmazione.
● Tutto ciò che include il pattern di progettazione MVC sono:
– Model: non sono nient’altro che contenitori di dati
– View: sono la rappresentazione dei dati
– Controller: sono ciò che media i Model e View
Corso base AngularJS Beniamino Ferrari 5
MVC con AngularJS (2)
<!DOCTYPE html>
<html ng-app>
<head>
<title>MVC</title>
<script type="text/javascript" src="angular.min.js"></script>
</head>
<body ng-controller="TextController">
<p>{{sampleText}}</p>
</body>
<script>
function TextController($scope) {
$scope.sampleText = 'This is a demo!';
}
</script>
</html>
Corso base AngularJS Beniamino Ferrari 6
MVC con AngularJS (3)
● Nell’esempio precedente, il nostro testo è rappresentato dalla
variabile "sampleText".
● La variabile "sampleText" è il nostro Model
● Il controller, la funzione TextController, aggiorna la view
visualizzando i dati nella vista sostituendo "{{sampleText}}" con
il valore della variabile sampleText.
● Il controller gestisce la relazione tra il nostro model e la view
che corrisponde alla pagina l'HTML.
Corso base AngularJS Beniamino Ferrari 7
MVVM con AngularJS (1)
● In MVC se apportiamo modifiche nella vista non viene
aggiornato nel modello. Ma in AngularJS, abbiamo sentito
che esiste qualcosa chiamato binding a 2 vie e questo binding a
2 vie consente l’utlizzo del pattern MVVM.
● MVVM comprende fondamentalmente 3 cose:
– Model
– View
– View Model
Corso base AngularJS Beniamino Ferrari 8
MVVM con AngularJS (2)
● Il controller viene effettivamente sostituito dal View Model
nel modello di progettazione MVVM.
● View Model non è altro che una funzione che è responsabile del
mantenimento della relazione tra vista e modello, ma la
differenza è che, se aggiorniamo qualcosa in vista, viene
aggiornato anche nel modello, e se viene aggiornato il modello
viene aggiornata la vista, è ciò che viene chiamato 2-way
binding.
Corso base AngularJS Beniamino Ferrari 9
MVVM con AngularJS (3)
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>Number Divisor</title>
</head>
<body>
<script type="text/javascript" src="angular.min.js"></script>
<script>
var app = angular.module('sampleApp', []);
app.controller("DivisionController",
function ($scope) {
$scope.data = { number: 0, divisor: 0, result: 0 };
$scope.divisionNeeded = function () {
$scope.data.result = $scope.data.number / $scope.data.divisor;
}
});
</script>
<form ng-app="sampleApp" ng-controller="DivisionController">
<label>Number :</label> <input name="number" ng-change="divisionNeeded()" ng-model="data.number">
<label>Number entered by User :</label> {{data.number}} <br>
<label>Divisor :</label> <input name="divisor" ng-change="divisionNeeded()" ng-model="data.divisor">
<label>Number entered by User :</label> {{data.divisor}} <br>
<label>Result :</label> {{data.result}}
</form>
</body>
</html>
Corso base AngularJS Beniamino Ferrari 10
MVVM con AngularJS (4)
● Il codice precedente contiene due input che prendono dividendo e
divisore. Il risultato della divisione viene visualizzato a lato
dell'etichetta "Result".
● Tutto ciò che viene inserito in questi due input viene visualizzato a
lato dell’input stesso.
● Ogni cambiamento degli input fa scattare una chiamata alla
funzione “divisionNeeded” dichiarata all’interno del controller.
● Questo codice mostra molto chiaramente il pattern di progettazione
MVVM in JavaScript.
Corso base AngularJS Beniamino Ferrari 11
MVVM con AngularJS (5)
Corso base AngularJS Beniamino Ferrari 12
NgBind (1)
● L'attributo ngBind sostituisce il contenuto dell'elemento HTML su cui
agisce con il valore di una determinata espressione e di aggiornare il
contenuto del testo quando il valore di tale espressione cambia.
● In genere, non si utilizza direttamente ngBind, ma si utilizza invece il doppio
markup ricurvo come {{expression}} che è simile ma meno dettagliato.
● È preferibile utilizzare ngBind invece di {{espressione}} se un modello viene
momentaneamente visualizzato dal browser nel suo stato grezzo prima che
AngularJS lo compili. ngBind rende i binding invisibili all'utente mentre la
pagina si sta caricando.
Corso base AngularJS Beniamino Ferrari 13
NgBind (2)
● Utilizzo:
<ANY
ng-bind="expression">
...
</ANY>
Corso base AngularJS Beniamino Ferrari 14
NgBind (3)
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.2/angular.min.js"></script>
</head>
<body ng-app="app">
<div ng-controller="controllerName">
<label>Enter Text <input type="text" ng-model="name" /> </label>
<br />
<b>Binded data:</b> <span ng-bind="name">
</span>
</div>
<script>
var app = angular.module("app", []);
app.controller('controllerName', ['$scope', function ($scope) {
$scope.name = 'Example';
}]);
</script>
</body>
</html>
Corso base AngularJS Beniamino Ferrari 15
!important (1)
● la keyword !important serve ad impostare una regola CSS
rispetto alle altre con cui è eventualmente in concorrenza.
Si supponga, ad esempio, di definire per due volte il colore del
testo del medesimo elemento (ad esempio un paragrafo).
● Secondo le regole comuni dei CSS (in base alla logica della
cascata) una seconda definizione di stile per lo stesso elemento
prevale sulla prima.
Corso base AngularJS Beniamino Ferrari 16
!important (2)
● p { color: #FF0000; }
p { color: #000000; }
la seconda regola prevale sulla prima, paragrafo nero
● p { color: #FF0000 !important; }
p { color: #000000; }
la prima prima prevale sulla seconda, paragrafo rosso
Corso base AngularJS Beniamino Ferrari 17
NgHide (1)
● La direttiva ngHide mostra o nasconde l'elemento HTML
dato in base all'espressione impostata.
● L'elemento è mostrato o nascosto rimuovendo o aggiungendo
la classe CSS ng-hide sull'elemento. La classe CSS .ng-hide è
predefinita in AngularJS e imposta lo stile di visualizzazione su
none (utilizzando un flag !important)
Corso base AngularJS Beniamino Ferrari 18
NgHide (2)
<!-- quando $scope.myValue è true (l’elemento viene nascosto)
-->
<div ng-hide="myValue" class="ng-hide"></div>
<!-- quando $scope.myValue è false (l’elmento è visibile) -->
<div ng-hide="myValue"></div>
Corso base AngularJS Beniamino Ferrari 19
NgHide (3)
● Quando l'espressione ngHide restituisce un valore di verità, la
classe CSS di .ng-hide viene aggiunta all'attributo di classe
sull'elemento che lo fa diventare nascosto. Quando è falsa, la
classe CSS di .ng-hide viene rimossa dall'elemento che fa sì
che l'elemento non appaia nascosto.
Corso base AngularJS Beniamino Ferrari 20
NgHide(4)
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.2/angular.min.js"></script>
</head>
<body ng-app="Demo">
<div class="row" ng-controller="myController">
<span class="col-md-3">
<span>Hide/Show</span> <input type="checkbox" ng-model="isChecked" />
</span>
<div class="col-md-9" ng-show="isChecked">
<input type="text" style="width:300px;" class="form-control" />
</div>
</div>
<script type="text/javascript">
var demo = angular.module("Demo", []);
demo.controller("myController", function ($scope) {
$scope.isChecked = true;
});
</script>
</body>
</html>
Corso base AngularJS Beniamino Ferrari 21
NgHide(5)
● Da default, la classe .ng-hide class è definita come:
display: none !important
● L’Overriding .ng-hide è possibile ridefinendo la classe css .ng-
hide
Corso base AngularJS Beniamino Ferrari 22
NgHide(6)
.ng-hide:not(.ng-hide-animate) {
/* Questo è un modo alternativo per nascondere un elemento*/
display: block!important;
position: absolute;
top: -9999px;
left: -9999px;
}
Corso base AngularJS Beniamino Ferrari 23
Ng-Show (1)
● La direttiva ngShow mostra o nasconde l'elemento HTML dato
in base all'espressione fornita all'attributo ngShow.
● L'elemento è mostrato o nascosto rimuovendo o aggiungendo
la classe CSS .ng-hide sull'elemento.
Corso base AngularJS Beniamino Ferrari 24
Ng-Show (2)
<!-- quando $scope.myValue è vero l’elemento è visibile -->
<div ng-show="myValue"></div>
<!-- quando $scope.myValue è falso l’element is nascosto -->
<div ng-show="myValue" class="ng-hide"></div>
Corso base AngularJS Beniamino Ferrari 25
Ng-If (1)
●
La direttiva ng-if consente di visualizzare porzioni dell’interfaccia utente in base
ad una condizione booleana
<div ng-controller="userController">
<p>Nome: <input type="text" ng-model="utente.nome"></p>
<p>Cognome: <input type="text" ng-model="utente.cognome"></p>
<p ng-if="utente.nome || utente.cognome">{{saluta()}}</p>
</div>
il messaggio di saluto viene mostrato quando almeno il nome o il cognome è stato
inserito nella casella di testo.
Corso base AngularJS Beniamino Ferrari 26
ng-switch
● La direttiva ng-switch seleziona la porzione di interfaccia da visualizzare in base al confronto tra una
espressione di controllo ed un elenco di possibili valori
<p>Colore: <input type="text" ng-model="colore"></p>
<div ng-switch="colore">
<span ng-switch-when="rosso" style="color:red">{{colore}}</span>
<span ng-switch-when="verde" style="color:green">{{colore}}</span>
<span ng-switch-when="blu" style="color:blue">{{colore}}</span>
<span ng-switch-default style="color:black">{{colore}}</span>
</div>
Il codice definisce una casella di testo in cui è possibile inserire il nome di un colore. In base al valore inserito
dall’utente, il nome del colore viene visualizzato nel colore indicato, se questo è rosso, verde o blu, altrimenti
viene visualizzato in nero.
Corso base AngularJS Beniamino Ferrari 27
Ng-include (1)
● La direttiva ng-include in AngularJS consente di includere, nella
vista corrente, del codice HTML esterno cioè codice che si trova
in un altro file
● <div ng-include="'dati/documento.html'"></div>
● Il contenuto del file documento.html sarà caricato, interpretato
da Angular e iniettato nel <div>.
Corso base AngularJS Beniamino Ferrari 28
Ng-include (2)
● Nota: È importante sottolineare che il codice contenuto nel file
esterno viene interpretato da Angular prima di effettuare il rendering
sulla pagina. Questo vuol dire che il file esterno può a sua volta
contenere direttive Angular.
● Un’altro aspetto a cui prestare attenzione è la modalità con cui viene
indicato l’URL del file da caricare: il valore associato alla direttiva è
una stringa e deve essere racchiusa tra virgolette e tra apici. Cioè,
oltre alle virgolette che delimitano il valore dell’attributo ("...") vanno
specificati gli apici che indicano che si tratta di una stringa JavaScript
('...').
Corso base AngularJS Beniamino Ferrari 29
Ng-include (3)
● Come per qualsiasi direttiva, il valore associato può essere una qualsiasi
espressione. Possiamo ad esempio specificare il caricamento
condizionale di contenuti esterni tramite un’espressione come la seguente:
<p>Età: <input type="text" ng-model="utente.eta"></p>
<div ng-include="utente.eta >= 18? 'dati/docMaggiorenni.html' :
'dati/docMinorenni.html'"></div>
● Usando l’operatore ternario (?:) di JavaScript carichiamo dinamicamente il
documento opportuno in base all’età specificata dall’utente.
Corso base AngularJS Beniamino Ferrari 30
Ng-include (4)
● Possiamo anche indicare una funzione che restituisce la stringa
che rappresenta il documento da caricare:
<p>Età: <input type="text" ng-model="utente.eta"></p>
<div ng-include="caricaDocumento(utente.eta)"> </div>
● Naturalmente alla direttiva si applica la same origin policy, cioè
la restrizione per cui è possibile caricare soltanto documenti
esterni provenienti dallo stesso dominio dell’applicazione
corrente.
Corso base AngularJS Beniamino Ferrari 31
Ng-class (1)
● La direttiva ngClass consente di impostare dinamicamente le classi CSS su un elemento
HTML usando ad esso un'espressione.
● La direttiva opera in tre modi diversi, a seconda di quale dei tre tipi l'espressione valuta:
– Tipo1 Se l'espressione restituisce una stringa, la stringa deve essere uno o più nomi di classi
delimitati da spazio.
– Tipo2 Se l'espressione restituisce un oggetto, per ogni coppia chiave-valore, per ogni oggetto con
un valore true verrà utilizzata la chiave corrispondente come nome di classe.
– Tipo3 Se l'espressione valuta un array, ogni elemento dell'array deve essere una stringa come nel
tipo 1 o un oggetto come nel tipo 2. Ciò significa che è possibile combinare stringhe e oggetti in un
array per avere un maggiore controllo su cosa Appaiono le classi CSS. Vedere il codice qui sotto
per un esempio di questo.
Corso base AngularJS Beniamino Ferrari 32
Ng-class (2)
● Come attributo
<ANY
ng-class="expression">
...
</ANY>
● Come classe css
<ANY class="ng-class: expression;"> ... </ANY>
Corso base AngularJS Beniamino Ferrari 33
Ng-class (3)
<!DOCTYPE html>
<html>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.9/angular.min.js"></script>
<style>
.sky {
color:white;
background-color:lightblue;
padding:20px;
font-family:"Courier New";
}
.tomato {
background-color:coral;
padding:40px;
font-family:Verdana;
}
</style>
<body ng-app="">
<p>Choose a class:</p>
<select ng-model="home">
<option value="sky">Sky</option>
<option value="tomato">Tomato</option>
</select>
<div ng-class="home">
<h1>Welcome Home!</h1>
<p>I like it!</p>
</div>
</body>
</html>
Corso base AngularJS Beniamino Ferrari 34
Ng-Repeat (1)
● Una delle direttive più interessanti messe a disposizione da Angular è ng-
repeat. Questa direttiva consente di generare un elenco di elementi HTML a
partire da una collezione di dati. Supponiamo ad esempio di avere un array di
nomi:
$scope.elencoNomi = ["Gianni", "Beppe", "Carlo", "Luigi"];
● Possiamo visualizzare l’elenco dei nomi in una lista non ordinata sfruttando ng-
repeat nel seguente modo:
<ul>
<li ng-repeat="nome in elencoNomi">{{nome}}</li>
</ul>
Corso base AngularJS Beniamino Ferrari 35
Ng-Repeat (2)
● L’espressione associata alla direttiva fa riferimento all’elenco da
cui prelevare i valori da visualizzare (elencoNomi) e definisce
una variabile (nome) che rappresenta l’elemento corrente
dell’array.Il risultato è l’elenco dei nomi contenuti nell’array:
● Gianni
● Beppe
● Carlo
● Luigi
Corso base AngularJS Beniamino Ferrari 36
Ng-Repeat (3)
● Ng-Repeat è utilizzabile anche con array di oggetti:
$scope.persone = [
{ nome: "Andrea", cognome: "Rossi", citta: "Roma" },
{ nome: "Marco", cognome: "Verdi", citta: "Milano" },
{ nome: "Giovanni", cognome: "Neri", citta: "Napoli" },
{ nome: "Roberto", cognome: "Gialli", citta: "Palermo" }
];
E visualizzare le proprietà desiderate:
<ul>
<li ng-repeat="persona in persone">
{{persona.nome}} {{persona.cognome}}
</li>
</ul>
Corso base AngularJS Beniamino Ferrari 37
Ng-Repeat (4)
● La direttiva ng-repeat definisce per ciascun elemento generato una variabile di
scope $index che rappresenta l’indice corrente. Questa variabile può risultare utile
in determinate situazioni. Ad esempio, se vogliamo visualizzare un contatore a
fianco ai dati visualizzati possiamo procedere nel seguente modo:
<ul>
<li ng-repeat="persona in persone">
N. {{$index}} - {{persona.nome}} {{persona.cognome}}
</li>
</ul>
● L’indice parte naturalmente da zero.
Corso base AngularJS Beniamino Ferrari 38
Ng-Repeat (5)
● ng-repeat si presta bene per la creazione di tabelle anche complesse. Il seguente esempio mostra
come visualizzare l’elenco delle persone in forma tabellare:
<table>
<tr><th>Indice</th><th>Nome</th><th>Cognome</th><th>Città</th></tr>
<tr ng-repeat="persona in persone">
<td>{{$index}}</td>
<td>{{persona.nome}}</td>
<td>{{persona.cognome}}</td>
<td>{{persona.citta}}</td>
</tr>
</table>
Corso base AngularJS Beniamino Ferrari 39
Ng-Repeat (6)
●
Una sintassi speciale può essere utilizzata per iterare sulle proprietà di un oggetto. Ad
esempio, se vogliamo visualizzare proprietà e valore di un oggetto persona scriveremo
il seguente codice:
● $scope.persona = { nome: "Mario", cognome: "Rossi", citta: "Roma"};
<ul>
<li ng-repeat="(key, value) in persona">
Proprietà: {{key}}<br/>
Valore: {{value}}
</li>
</ul>
Corso base AngularJS Beniamino Ferrari 40
Ng-Options (1)
● L'attributo ngOptions può essere utilizzato per generare dinamicamente un
elenco di elementi <option> per l'elemento <select> utilizzando l'array o
l'oggetto ottenuto valutando l'espressione di ngOptions.
<select>
<option value="volvo">Volvo</option>
<option value="saab">Saab</option>
<option value="mercedes">Mercedes</option>
<option value="audi">Audi</option>
</select>
Corso base AngularJS Beniamino Ferrari 41
Ng-Options (2)
● In molti casi, ngRepeat può essere utilizzato sugli elementi
<option> invece di ngOptions per ottenere un risultato simile.
Tuttavia, ngOptions offre alcuni vantaggi:
– maggiore flessibilità nel modo in cui il modello <select> viene
assegnato tramite la selezione come parte dell'espressione di
comprensione
– consumo di memoria ridotto non creando un nuovo ambito per ogni
istanza ripetuta
– maggiore velocità di rendering creando le opzioni in un documento
Frammento anziché singolarmente
Corso base AngularJS Beniamino Ferrari 42
Ng-Options (3)
● Quando viene selezionato un elemento nel menu <select>,
l'elemento dell'array o la proprietà dell'oggetto rappresentata
dall'opzione selezionata sarà associata al modello identificato
dalla direttiva ngModel.
$scope.elencoCitta = ["Roma", "Milano", "Napoli", "Palermo"];
<select ng-model="selectedItem">
<option ng-repeat="citta in elencoCitta"
value="{{citta}}">{{citta}}</option>
</select>
Corso base AngularJS Beniamino Ferrari 43
Ng-Options (4)
●
In questo caso possiamo utilizzare un array di oggetti come mostrato di seguito:
$scope.elencoCitta = [
{codice: "RM", nome: "Roma"},
{codice: "MI", nome: "Milano"},
{codice: "NA", nome: "Napoli"},
{codice: "PA", nome:"Palermo"}
];
<select ng-model="selectedItem">
<option ng-repeat="citta in elencoCitta" value="{{citta.codice}}">{{citta.nome}}</option>
</select>
<p ng-if="selectedItem">Hai selezionato {{selectedItem}}!</p>
Può essere scritto molto più semplicemente con ng-option
<select ng-model="selectedItem"
ng-options="citta.nome for citta in elencoCitta">
</select>
Corso base AngularJS Beniamino Ferrari 44
Ng-Options (5)
● Un’altra interessante variante consente di raggruppare le voci della select. Per fare un esempio, supponiamo di avere il seguente array:
$scope.elencoCitta = [
{codice: "RM", nome: "Roma", regione: "Lazio"},
{codice: "LT", nome: "Latina", regione: "Lazio"},
{codice: "MI", nome: "Milano" regione: "Lombardia"},
{codice: "NA", nome: "Napoli" regione: "Campania"},
{codice: "CO", nome: "Como" regione: "Lombardia"},
{codice: "PA", nome:"Palermo", regione: "Sicilia"},
{codice: "CA", nome: "Caserta" regione: "Campania"},
{codice: "AV", nome: "Avellino" regione: "Campania"},
{codice: "TP", nome:"Trapani", regione: "Sicilia"},
{codice: "AG", nome:"Agrigento", regione: "Sicilia"}
];
<select ng-model="selectedItem"
ng-options="citta.nome group by citta.regione for citta in elencoCitta">
</select>
Corso base AngularJS Beniamino Ferrari 45
Ng-Options (6)
Corso base AngularJS Beniamino Ferrari 46
Ng-Options (7)
● ng-options abbiamo la possibilità di iterare sulle proprietà di un
oggetto. Pertanto, se abbiamo il seguente oggetto:
$scope.citta = {codice: "RM", nome: "Roma", regione: "Lazio"};
<select ng-model="selectedItem"
ng-options="value for (key, value) in citta">
</select>
Corso base AngularJS Beniamino Ferrari 47
Direttive di evento
●
AngularJS prevede una serie di direttive per gestire gli eventi di interazione dell’utente con l’interfaccia grafica.
Tra le più usate
– ng-click
– ng-dbl-click
– ng-mousedown
– ng-mouseup
– ng-mouseenter
– ng-mouseleave
– ng-mousemove
– ng-mouseover
– ng-keydown
– ng-keyup
– ng-keypress
– ng-change
Corso base AngularJS Beniamino Ferrari 48
ng-click
<div>
<input type="number" ng-model="numero1"/>
+
<input type="number" ng-model="numero2"/>
=
<input type="number" ng-model="risultato"/>
</div>
<button ng-click="risultato = numero1 + numero2">Somma</button>
In maniera equivalente
<button ng-click="somma()">Somma</button>
$scope.somma = function() {
$scope.risultato = $scope.numero1 + $scope.numero2;
}
Corso base AngularJS Beniamino Ferrari 49
ng-cloak
● la direttiva ng-cloak viene utilizzata per impedire che il model
venga visualizzato dal browser nel suo formato non formattato
(non compilato) al moento del caricamento.
● Questa direttiva viene utilizzata evitare l'effetto sfarfallio
indesiderato causato dalla visualizzazione del template html.

Más contenido relacionado

La actualidad más candente

Workshop Ideare e creare Web Applications, Introduzione ad AngularJS
Workshop Ideare e creare Web Applications, Introduzione ad AngularJSWorkshop Ideare e creare Web Applications, Introduzione ad AngularJS
Workshop Ideare e creare Web Applications, Introduzione ad AngularJSGiovanni Buffa
 
Introduzione a java script
Introduzione a java scriptIntroduzione a java script
Introduzione a java scriptMatteo Ceserani
 
Niccolò Becchi: Introduzione a GWT
Niccolò Becchi: Introduzione a GWTNiccolò Becchi: Introduzione a GWT
Niccolò Becchi: Introduzione a GWTfirenze-gtug
 
AngularJS: server communication
AngularJS: server communicationAngularJS: server communication
AngularJS: server communicationVittorio Conte
 
AngularJS – Reinventare le applicazioni web
AngularJS – Reinventare le applicazioni webAngularJS – Reinventare le applicazioni web
AngularJS – Reinventare le applicazioni webLuca Milan
 
Corso WebApp iOS - Lezione 06: Web Development for iOS Devices
Corso WebApp iOS - Lezione 06:   Web Development for iOS DevicesCorso WebApp iOS - Lezione 06:   Web Development for iOS Devices
Corso WebApp iOS - Lezione 06: Web Development for iOS DevicesAndrea Picchi
 

La actualidad más candente (14)

Knockout.js
Knockout.jsKnockout.js
Knockout.js
 
Angular js: routing
Angular js: routingAngular js: routing
Angular js: routing
 
Mvvm
MvvmMvvm
Mvvm
 
Workshop Ideare e creare Web Applications, Introduzione ad AngularJS
Workshop Ideare e creare Web Applications, Introduzione ad AngularJSWorkshop Ideare e creare Web Applications, Introduzione ad AngularJS
Workshop Ideare e creare Web Applications, Introduzione ad AngularJS
 
AngularJS 2.0
AngularJS 2.0 AngularJS 2.0
AngularJS 2.0
 
Corso angular js componenti
Corso angular js componentiCorso angular js componenti
Corso angular js componenti
 
Introduzione a java script
Introduzione a java scriptIntroduzione a java script
Introduzione a java script
 
Niccolò Becchi: Introduzione a GWT
Niccolò Becchi: Introduzione a GWTNiccolò Becchi: Introduzione a GWT
Niccolò Becchi: Introduzione a GWT
 
AngularJS: server communication
AngularJS: server communicationAngularJS: server communication
AngularJS: server communication
 
AngularJS – Reinventare le applicazioni web
AngularJS – Reinventare le applicazioni webAngularJS – Reinventare le applicazioni web
AngularJS – Reinventare le applicazioni web
 
ASP.NET MVC
ASP.NET MVCASP.NET MVC
ASP.NET MVC
 
HTML Form
HTML Form HTML Form
HTML Form
 
Corso angular js material
Corso angular js materialCorso angular js material
Corso angular js material
 
Corso WebApp iOS - Lezione 06: Web Development for iOS Devices
Corso WebApp iOS - Lezione 06:   Web Development for iOS DevicesCorso WebApp iOS - Lezione 06:   Web Development for iOS Devices
Corso WebApp iOS - Lezione 06: Web Development for iOS Devices
 

Similar a Corso angular js base

Introduzione ad angular 7/8
Introduzione ad angular 7/8Introduzione ad angular 7/8
Introduzione ad angular 7/8Valerio Radice
 
Tech Webinar: Advanced AngularJS, tecniche avanzate per padroneggiare il fram...
Tech Webinar: Advanced AngularJS, tecniche avanzate per padroneggiare il fram...Tech Webinar: Advanced AngularJS, tecniche avanzate per padroneggiare il fram...
Tech Webinar: Advanced AngularJS, tecniche avanzate per padroneggiare il fram...Codemotion
 
ASP.NET MVC 3: se non ora, quando?
ASP.NET MVC 3: se non ora, quando?ASP.NET MVC 3: se non ora, quando?
ASP.NET MVC 3: se non ora, quando?Giorgio Di Nardo
 
Angular 4 - convertire o migrare un'applicazione Angularjs
Angular 4 -  convertire o migrare un'applicazione AngularjsAngular 4 -  convertire o migrare un'applicazione Angularjs
Angular 4 - convertire o migrare un'applicazione AngularjsGiovanni Buffa
 
Hands on MVC - Mastering the Web
Hands on MVC - Mastering the WebHands on MVC - Mastering the Web
Hands on MVC - Mastering the WebClaudio Gandelli
 
Model-View-ViewModel con Windows Store Apps
Model-View-ViewModel con Windows Store AppsModel-View-ViewModel con Windows Store Apps
Model-View-ViewModel con Windows Store Appscodeblock
 
Creazione componenti con Vue js
Creazione componenti con Vue jsCreazione componenti con Vue js
Creazione componenti con Vue jsGianfranco Castro
 
Asp.Net MVC 3 - Il Model View Controller secondo Microsoft
Asp.Net MVC 3 - Il Model View Controller secondo MicrosoftAsp.Net MVC 3 - Il Model View Controller secondo Microsoft
Asp.Net MVC 3 - Il Model View Controller secondo MicrosoftStefano Benedetti
 
Blazor: are we ready for the launch?
Blazor: are we ready for the launch?Blazor: are we ready for the launch?
Blazor: are we ready for the launch?Andrea Agnoletto
 
corso web developer - Introduzione a Javascript
corso web developer - Introduzione a Javascriptcorso web developer - Introduzione a Javascript
corso web developer - Introduzione a JavascriptRiccardo Piccioni
 
Django & Google App Engine: a value composition
Django & Google App Engine: a value compositionDjango & Google App Engine: a value composition
Django & Google App Engine: a value compositionOpen Makers Italy
 
Meetup ASP.NET Core Angular
Meetup ASP.NET Core AngularMeetup ASP.NET Core Angular
Meetup ASP.NET Core Angulardotnetcode
 
Alessandro Forte - MVP vs MVC
Alessandro Forte - MVP vs MVCAlessandro Forte - MVP vs MVC
Alessandro Forte - MVP vs MVCAlessandro Forte
 
ASP.NET MVC 2.0
ASP.NET MVC 2.0ASP.NET MVC 2.0
ASP.NET MVC 2.0XeDotNet
 
Design pattern architetturali Model View Controller, MVP e MVVM
Design pattern architetturali   Model View Controller, MVP e MVVMDesign pattern architetturali   Model View Controller, MVP e MVVM
Design pattern architetturali Model View Controller, MVP e MVVMRiccardo Cardin
 

Similar a Corso angular js base (20)

Introduzione ad angular 7/8
Introduzione ad angular 7/8Introduzione ad angular 7/8
Introduzione ad angular 7/8
 
Tech Webinar: Advanced AngularJS, tecniche avanzate per padroneggiare il fram...
Tech Webinar: Advanced AngularJS, tecniche avanzate per padroneggiare il fram...Tech Webinar: Advanced AngularJS, tecniche avanzate per padroneggiare il fram...
Tech Webinar: Advanced AngularJS, tecniche avanzate per padroneggiare il fram...
 
ASP.NET MVC 3: se non ora, quando?
ASP.NET MVC 3: se non ora, quando?ASP.NET MVC 3: se non ora, quando?
ASP.NET MVC 3: se non ora, quando?
 
MVC and Struts 1
MVC and Struts 1MVC and Struts 1
MVC and Struts 1
 
Angular 4 - convertire o migrare un'applicazione Angularjs
Angular 4 -  convertire o migrare un'applicazione AngularjsAngular 4 -  convertire o migrare un'applicazione Angularjs
Angular 4 - convertire o migrare un'applicazione Angularjs
 
Hands on MVC - Mastering the Web
Hands on MVC - Mastering the WebHands on MVC - Mastering the Web
Hands on MVC - Mastering the Web
 
MVC2: non solo tecnologia
MVC2: non solo tecnologiaMVC2: non solo tecnologia
MVC2: non solo tecnologia
 
Model-View-ViewModel con Windows Store Apps
Model-View-ViewModel con Windows Store AppsModel-View-ViewModel con Windows Store Apps
Model-View-ViewModel con Windows Store Apps
 
Creazione componenti con Vue js
Creazione componenti con Vue jsCreazione componenti con Vue js
Creazione componenti con Vue js
 
Asp.Net MVC 3 - Il Model View Controller secondo Microsoft
Asp.Net MVC 3 - Il Model View Controller secondo MicrosoftAsp.Net MVC 3 - Il Model View Controller secondo Microsoft
Asp.Net MVC 3 - Il Model View Controller secondo Microsoft
 
Introduzione a Struts
Introduzione a StrutsIntroduzione a Struts
Introduzione a Struts
 
Blazor: are we ready for the launch?
Blazor: are we ready for the launch?Blazor: are we ready for the launch?
Blazor: are we ready for the launch?
 
corso web developer - Introduzione a Javascript
corso web developer - Introduzione a Javascriptcorso web developer - Introduzione a Javascript
corso web developer - Introduzione a Javascript
 
ASP.NET MVC: Full Throttle
ASP.NET MVC: Full ThrottleASP.NET MVC: Full Throttle
ASP.NET MVC: Full Throttle
 
Django & Google App Engine: a value composition
Django & Google App Engine: a value compositionDjango & Google App Engine: a value composition
Django & Google App Engine: a value composition
 
Meetup ASP.NET Core Angular
Meetup ASP.NET Core AngularMeetup ASP.NET Core Angular
Meetup ASP.NET Core Angular
 
Alessandro Forte - MVP vs MVC
Alessandro Forte - MVP vs MVCAlessandro Forte - MVP vs MVC
Alessandro Forte - MVP vs MVC
 
ASP.NET MVC Intro
ASP.NET MVC IntroASP.NET MVC Intro
ASP.NET MVC Intro
 
ASP.NET MVC 2.0
ASP.NET MVC 2.0ASP.NET MVC 2.0
ASP.NET MVC 2.0
 
Design pattern architetturali Model View Controller, MVP e MVVM
Design pattern architetturali   Model View Controller, MVP e MVVMDesign pattern architetturali   Model View Controller, MVP e MVVM
Design pattern architetturali Model View Controller, MVP e MVVM
 

Más de Beniamino Ferrari (11)

Laravel 7 REST API
Laravel 7 REST APILaravel 7 REST API
Laravel 7 REST API
 
Laravel Framework PHP
Laravel Framework PHPLaravel Framework PHP
Laravel Framework PHP
 
Xamarin.android
Xamarin.androidXamarin.android
Xamarin.android
 
Persistenza su Xamarin
Persistenza su XamarinPersistenza su Xamarin
Persistenza su Xamarin
 
Interfaccia di Xamarin
Interfaccia di XamarinInterfaccia di Xamarin
Interfaccia di Xamarin
 
Xaml su Xamarin
Xaml su XamarinXaml su Xamarin
Xaml su Xamarin
 
Installazione di Xamarin
Installazione di XamarinInstallazione di Xamarin
Installazione di Xamarin
 
Introduzione a Xamarin
Introduzione a XamarinIntroduzione a Xamarin
Introduzione a Xamarin
 
Net core base
Net core baseNet core base
Net core base
 
Corso linux base
Corso linux baseCorso linux base
Corso linux base
 
couchbase mobile
couchbase mobilecouchbase mobile
couchbase mobile
 

Corso angular js base

  • 2. Corso base AngularJS Beniamino Ferrari 2 Introduzione ● AngularJS è un framework lato client ideato per applicazioni web che reinterpreta l’HTML. ● AngulaJS è un framework per scrivere applicazioni Single Page (SPA). È solo uno dei molti framework JavaScript per lo sviluppo di SPA, ma è ampiamente utilizzato, perché permette un’architettura MVW (Model - View - Whatever).
  • 3. Corso base AngularJS Beniamino Ferrari 3 Cos’è MVW? ● MVW vuol dire che il pattern architetturale può essere MVC o MVVM ● MVC (Model - View - Controller) è ben noto da molto tempo ed è il modello principale per lo sviluppo di codice lato server per applicazioni web. ● MVVM è relativamente nuovo e si sta evolvendo con le applicazioni per dispositivi mobili, ma è anche passato a SPA.
  • 4. Corso base AngularJS Beniamino Ferrari 4 MVC con AngularJS (1) ● Per iniziare, il modello di progettazione MVC non è specifico di AngularJS ma è usato in molti altri linguaggi di programmazione. ● Tutto ciò che include il pattern di progettazione MVC sono: – Model: non sono nient’altro che contenitori di dati – View: sono la rappresentazione dei dati – Controller: sono ciò che media i Model e View
  • 5. Corso base AngularJS Beniamino Ferrari 5 MVC con AngularJS (2) <!DOCTYPE html> <html ng-app> <head> <title>MVC</title> <script type="text/javascript" src="angular.min.js"></script> </head> <body ng-controller="TextController"> <p>{{sampleText}}</p> </body> <script> function TextController($scope) { $scope.sampleText = 'This is a demo!'; } </script> </html>
  • 6. Corso base AngularJS Beniamino Ferrari 6 MVC con AngularJS (3) ● Nell’esempio precedente, il nostro testo è rappresentato dalla variabile "sampleText". ● La variabile "sampleText" è il nostro Model ● Il controller, la funzione TextController, aggiorna la view visualizzando i dati nella vista sostituendo "{{sampleText}}" con il valore della variabile sampleText. ● Il controller gestisce la relazione tra il nostro model e la view che corrisponde alla pagina l'HTML.
  • 7. Corso base AngularJS Beniamino Ferrari 7 MVVM con AngularJS (1) ● In MVC se apportiamo modifiche nella vista non viene aggiornato nel modello. Ma in AngularJS, abbiamo sentito che esiste qualcosa chiamato binding a 2 vie e questo binding a 2 vie consente l’utlizzo del pattern MVVM. ● MVVM comprende fondamentalmente 3 cose: – Model – View – View Model
  • 8. Corso base AngularJS Beniamino Ferrari 8 MVVM con AngularJS (2) ● Il controller viene effettivamente sostituito dal View Model nel modello di progettazione MVVM. ● View Model non è altro che una funzione che è responsabile del mantenimento della relazione tra vista e modello, ma la differenza è che, se aggiorniamo qualcosa in vista, viene aggiornato anche nel modello, e se viene aggiornato il modello viene aggiornata la vista, è ciò che viene chiamato 2-way binding.
  • 9. Corso base AngularJS Beniamino Ferrari 9 MVVM con AngularJS (3) <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title>Number Divisor</title> </head> <body> <script type="text/javascript" src="angular.min.js"></script> <script> var app = angular.module('sampleApp', []); app.controller("DivisionController", function ($scope) { $scope.data = { number: 0, divisor: 0, result: 0 }; $scope.divisionNeeded = function () { $scope.data.result = $scope.data.number / $scope.data.divisor; } }); </script> <form ng-app="sampleApp" ng-controller="DivisionController"> <label>Number :</label> <input name="number" ng-change="divisionNeeded()" ng-model="data.number"> <label>Number entered by User :</label> {{data.number}} <br> <label>Divisor :</label> <input name="divisor" ng-change="divisionNeeded()" ng-model="data.divisor"> <label>Number entered by User :</label> {{data.divisor}} <br> <label>Result :</label> {{data.result}} </form> </body> </html>
  • 10. Corso base AngularJS Beniamino Ferrari 10 MVVM con AngularJS (4) ● Il codice precedente contiene due input che prendono dividendo e divisore. Il risultato della divisione viene visualizzato a lato dell'etichetta "Result". ● Tutto ciò che viene inserito in questi due input viene visualizzato a lato dell’input stesso. ● Ogni cambiamento degli input fa scattare una chiamata alla funzione “divisionNeeded” dichiarata all’interno del controller. ● Questo codice mostra molto chiaramente il pattern di progettazione MVVM in JavaScript.
  • 11. Corso base AngularJS Beniamino Ferrari 11 MVVM con AngularJS (5)
  • 12. Corso base AngularJS Beniamino Ferrari 12 NgBind (1) ● L'attributo ngBind sostituisce il contenuto dell'elemento HTML su cui agisce con il valore di una determinata espressione e di aggiornare il contenuto del testo quando il valore di tale espressione cambia. ● In genere, non si utilizza direttamente ngBind, ma si utilizza invece il doppio markup ricurvo come {{expression}} che è simile ma meno dettagliato. ● È preferibile utilizzare ngBind invece di {{espressione}} se un modello viene momentaneamente visualizzato dal browser nel suo stato grezzo prima che AngularJS lo compili. ngBind rende i binding invisibili all'utente mentre la pagina si sta caricando.
  • 13. Corso base AngularJS Beniamino Ferrari 13 NgBind (2) ● Utilizzo: <ANY ng-bind="expression"> ... </ANY>
  • 14. Corso base AngularJS Beniamino Ferrari 14 NgBind (3) <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title></title> <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.2/angular.min.js"></script> </head> <body ng-app="app"> <div ng-controller="controllerName"> <label>Enter Text <input type="text" ng-model="name" /> </label> <br /> <b>Binded data:</b> <span ng-bind="name"> </span> </div> <script> var app = angular.module("app", []); app.controller('controllerName', ['$scope', function ($scope) { $scope.name = 'Example'; }]); </script> </body> </html>
  • 15. Corso base AngularJS Beniamino Ferrari 15 !important (1) ● la keyword !important serve ad impostare una regola CSS rispetto alle altre con cui è eventualmente in concorrenza. Si supponga, ad esempio, di definire per due volte il colore del testo del medesimo elemento (ad esempio un paragrafo). ● Secondo le regole comuni dei CSS (in base alla logica della cascata) una seconda definizione di stile per lo stesso elemento prevale sulla prima.
  • 16. Corso base AngularJS Beniamino Ferrari 16 !important (2) ● p { color: #FF0000; } p { color: #000000; } la seconda regola prevale sulla prima, paragrafo nero ● p { color: #FF0000 !important; } p { color: #000000; } la prima prima prevale sulla seconda, paragrafo rosso
  • 17. Corso base AngularJS Beniamino Ferrari 17 NgHide (1) ● La direttiva ngHide mostra o nasconde l'elemento HTML dato in base all'espressione impostata. ● L'elemento è mostrato o nascosto rimuovendo o aggiungendo la classe CSS ng-hide sull'elemento. La classe CSS .ng-hide è predefinita in AngularJS e imposta lo stile di visualizzazione su none (utilizzando un flag !important)
  • 18. Corso base AngularJS Beniamino Ferrari 18 NgHide (2) <!-- quando $scope.myValue è true (l’elemento viene nascosto) --> <div ng-hide="myValue" class="ng-hide"></div> <!-- quando $scope.myValue è false (l’elmento è visibile) --> <div ng-hide="myValue"></div>
  • 19. Corso base AngularJS Beniamino Ferrari 19 NgHide (3) ● Quando l'espressione ngHide restituisce un valore di verità, la classe CSS di .ng-hide viene aggiunta all'attributo di classe sull'elemento che lo fa diventare nascosto. Quando è falsa, la classe CSS di .ng-hide viene rimossa dall'elemento che fa sì che l'elemento non appaia nascosto.
  • 20. Corso base AngularJS Beniamino Ferrari 20 NgHide(4) <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title></title> <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.2/angular.min.js"></script> </head> <body ng-app="Demo"> <div class="row" ng-controller="myController"> <span class="col-md-3"> <span>Hide/Show</span> <input type="checkbox" ng-model="isChecked" /> </span> <div class="col-md-9" ng-show="isChecked"> <input type="text" style="width:300px;" class="form-control" /> </div> </div> <script type="text/javascript"> var demo = angular.module("Demo", []); demo.controller("myController", function ($scope) { $scope.isChecked = true; }); </script> </body> </html>
  • 21. Corso base AngularJS Beniamino Ferrari 21 NgHide(5) ● Da default, la classe .ng-hide class è definita come: display: none !important ● L’Overriding .ng-hide è possibile ridefinendo la classe css .ng- hide
  • 22. Corso base AngularJS Beniamino Ferrari 22 NgHide(6) .ng-hide:not(.ng-hide-animate) { /* Questo è un modo alternativo per nascondere un elemento*/ display: block!important; position: absolute; top: -9999px; left: -9999px; }
  • 23. Corso base AngularJS Beniamino Ferrari 23 Ng-Show (1) ● La direttiva ngShow mostra o nasconde l'elemento HTML dato in base all'espressione fornita all'attributo ngShow. ● L'elemento è mostrato o nascosto rimuovendo o aggiungendo la classe CSS .ng-hide sull'elemento.
  • 24. Corso base AngularJS Beniamino Ferrari 24 Ng-Show (2) <!-- quando $scope.myValue è vero l’elemento è visibile --> <div ng-show="myValue"></div> <!-- quando $scope.myValue è falso l’element is nascosto --> <div ng-show="myValue" class="ng-hide"></div>
  • 25. Corso base AngularJS Beniamino Ferrari 25 Ng-If (1) ● La direttiva ng-if consente di visualizzare porzioni dell’interfaccia utente in base ad una condizione booleana <div ng-controller="userController"> <p>Nome: <input type="text" ng-model="utente.nome"></p> <p>Cognome: <input type="text" ng-model="utente.cognome"></p> <p ng-if="utente.nome || utente.cognome">{{saluta()}}</p> </div> il messaggio di saluto viene mostrato quando almeno il nome o il cognome è stato inserito nella casella di testo.
  • 26. Corso base AngularJS Beniamino Ferrari 26 ng-switch ● La direttiva ng-switch seleziona la porzione di interfaccia da visualizzare in base al confronto tra una espressione di controllo ed un elenco di possibili valori <p>Colore: <input type="text" ng-model="colore"></p> <div ng-switch="colore"> <span ng-switch-when="rosso" style="color:red">{{colore}}</span> <span ng-switch-when="verde" style="color:green">{{colore}}</span> <span ng-switch-when="blu" style="color:blue">{{colore}}</span> <span ng-switch-default style="color:black">{{colore}}</span> </div> Il codice definisce una casella di testo in cui è possibile inserire il nome di un colore. In base al valore inserito dall’utente, il nome del colore viene visualizzato nel colore indicato, se questo è rosso, verde o blu, altrimenti viene visualizzato in nero.
  • 27. Corso base AngularJS Beniamino Ferrari 27 Ng-include (1) ● La direttiva ng-include in AngularJS consente di includere, nella vista corrente, del codice HTML esterno cioè codice che si trova in un altro file ● <div ng-include="'dati/documento.html'"></div> ● Il contenuto del file documento.html sarà caricato, interpretato da Angular e iniettato nel <div>.
  • 28. Corso base AngularJS Beniamino Ferrari 28 Ng-include (2) ● Nota: È importante sottolineare che il codice contenuto nel file esterno viene interpretato da Angular prima di effettuare il rendering sulla pagina. Questo vuol dire che il file esterno può a sua volta contenere direttive Angular. ● Un’altro aspetto a cui prestare attenzione è la modalità con cui viene indicato l’URL del file da caricare: il valore associato alla direttiva è una stringa e deve essere racchiusa tra virgolette e tra apici. Cioè, oltre alle virgolette che delimitano il valore dell’attributo ("...") vanno specificati gli apici che indicano che si tratta di una stringa JavaScript ('...').
  • 29. Corso base AngularJS Beniamino Ferrari 29 Ng-include (3) ● Come per qualsiasi direttiva, il valore associato può essere una qualsiasi espressione. Possiamo ad esempio specificare il caricamento condizionale di contenuti esterni tramite un’espressione come la seguente: <p>Età: <input type="text" ng-model="utente.eta"></p> <div ng-include="utente.eta >= 18? 'dati/docMaggiorenni.html' : 'dati/docMinorenni.html'"></div> ● Usando l’operatore ternario (?:) di JavaScript carichiamo dinamicamente il documento opportuno in base all’età specificata dall’utente.
  • 30. Corso base AngularJS Beniamino Ferrari 30 Ng-include (4) ● Possiamo anche indicare una funzione che restituisce la stringa che rappresenta il documento da caricare: <p>Età: <input type="text" ng-model="utente.eta"></p> <div ng-include="caricaDocumento(utente.eta)"> </div> ● Naturalmente alla direttiva si applica la same origin policy, cioè la restrizione per cui è possibile caricare soltanto documenti esterni provenienti dallo stesso dominio dell’applicazione corrente.
  • 31. Corso base AngularJS Beniamino Ferrari 31 Ng-class (1) ● La direttiva ngClass consente di impostare dinamicamente le classi CSS su un elemento HTML usando ad esso un'espressione. ● La direttiva opera in tre modi diversi, a seconda di quale dei tre tipi l'espressione valuta: – Tipo1 Se l'espressione restituisce una stringa, la stringa deve essere uno o più nomi di classi delimitati da spazio. – Tipo2 Se l'espressione restituisce un oggetto, per ogni coppia chiave-valore, per ogni oggetto con un valore true verrà utilizzata la chiave corrispondente come nome di classe. – Tipo3 Se l'espressione valuta un array, ogni elemento dell'array deve essere una stringa come nel tipo 1 o un oggetto come nel tipo 2. Ciò significa che è possibile combinare stringhe e oggetti in un array per avere un maggiore controllo su cosa Appaiono le classi CSS. Vedere il codice qui sotto per un esempio di questo.
  • 32. Corso base AngularJS Beniamino Ferrari 32 Ng-class (2) ● Come attributo <ANY ng-class="expression"> ... </ANY> ● Come classe css <ANY class="ng-class: expression;"> ... </ANY>
  • 33. Corso base AngularJS Beniamino Ferrari 33 Ng-class (3) <!DOCTYPE html> <html> <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.9/angular.min.js"></script> <style> .sky { color:white; background-color:lightblue; padding:20px; font-family:"Courier New"; } .tomato { background-color:coral; padding:40px; font-family:Verdana; } </style> <body ng-app=""> <p>Choose a class:</p> <select ng-model="home"> <option value="sky">Sky</option> <option value="tomato">Tomato</option> </select> <div ng-class="home"> <h1>Welcome Home!</h1> <p>I like it!</p> </div> </body> </html>
  • 34. Corso base AngularJS Beniamino Ferrari 34 Ng-Repeat (1) ● Una delle direttive più interessanti messe a disposizione da Angular è ng- repeat. Questa direttiva consente di generare un elenco di elementi HTML a partire da una collezione di dati. Supponiamo ad esempio di avere un array di nomi: $scope.elencoNomi = ["Gianni", "Beppe", "Carlo", "Luigi"]; ● Possiamo visualizzare l’elenco dei nomi in una lista non ordinata sfruttando ng- repeat nel seguente modo: <ul> <li ng-repeat="nome in elencoNomi">{{nome}}</li> </ul>
  • 35. Corso base AngularJS Beniamino Ferrari 35 Ng-Repeat (2) ● L’espressione associata alla direttiva fa riferimento all’elenco da cui prelevare i valori da visualizzare (elencoNomi) e definisce una variabile (nome) che rappresenta l’elemento corrente dell’array.Il risultato è l’elenco dei nomi contenuti nell’array: ● Gianni ● Beppe ● Carlo ● Luigi
  • 36. Corso base AngularJS Beniamino Ferrari 36 Ng-Repeat (3) ● Ng-Repeat è utilizzabile anche con array di oggetti: $scope.persone = [ { nome: "Andrea", cognome: "Rossi", citta: "Roma" }, { nome: "Marco", cognome: "Verdi", citta: "Milano" }, { nome: "Giovanni", cognome: "Neri", citta: "Napoli" }, { nome: "Roberto", cognome: "Gialli", citta: "Palermo" } ]; E visualizzare le proprietà desiderate: <ul> <li ng-repeat="persona in persone"> {{persona.nome}} {{persona.cognome}} </li> </ul>
  • 37. Corso base AngularJS Beniamino Ferrari 37 Ng-Repeat (4) ● La direttiva ng-repeat definisce per ciascun elemento generato una variabile di scope $index che rappresenta l’indice corrente. Questa variabile può risultare utile in determinate situazioni. Ad esempio, se vogliamo visualizzare un contatore a fianco ai dati visualizzati possiamo procedere nel seguente modo: <ul> <li ng-repeat="persona in persone"> N. {{$index}} - {{persona.nome}} {{persona.cognome}} </li> </ul> ● L’indice parte naturalmente da zero.
  • 38. Corso base AngularJS Beniamino Ferrari 38 Ng-Repeat (5) ● ng-repeat si presta bene per la creazione di tabelle anche complesse. Il seguente esempio mostra come visualizzare l’elenco delle persone in forma tabellare: <table> <tr><th>Indice</th><th>Nome</th><th>Cognome</th><th>Città</th></tr> <tr ng-repeat="persona in persone"> <td>{{$index}}</td> <td>{{persona.nome}}</td> <td>{{persona.cognome}}</td> <td>{{persona.citta}}</td> </tr> </table>
  • 39. Corso base AngularJS Beniamino Ferrari 39 Ng-Repeat (6) ● Una sintassi speciale può essere utilizzata per iterare sulle proprietà di un oggetto. Ad esempio, se vogliamo visualizzare proprietà e valore di un oggetto persona scriveremo il seguente codice: ● $scope.persona = { nome: "Mario", cognome: "Rossi", citta: "Roma"}; <ul> <li ng-repeat="(key, value) in persona"> Proprietà: {{key}}<br/> Valore: {{value}} </li> </ul>
  • 40. Corso base AngularJS Beniamino Ferrari 40 Ng-Options (1) ● L'attributo ngOptions può essere utilizzato per generare dinamicamente un elenco di elementi <option> per l'elemento <select> utilizzando l'array o l'oggetto ottenuto valutando l'espressione di ngOptions. <select> <option value="volvo">Volvo</option> <option value="saab">Saab</option> <option value="mercedes">Mercedes</option> <option value="audi">Audi</option> </select>
  • 41. Corso base AngularJS Beniamino Ferrari 41 Ng-Options (2) ● In molti casi, ngRepeat può essere utilizzato sugli elementi <option> invece di ngOptions per ottenere un risultato simile. Tuttavia, ngOptions offre alcuni vantaggi: – maggiore flessibilità nel modo in cui il modello <select> viene assegnato tramite la selezione come parte dell'espressione di comprensione – consumo di memoria ridotto non creando un nuovo ambito per ogni istanza ripetuta – maggiore velocità di rendering creando le opzioni in un documento Frammento anziché singolarmente
  • 42. Corso base AngularJS Beniamino Ferrari 42 Ng-Options (3) ● Quando viene selezionato un elemento nel menu <select>, l'elemento dell'array o la proprietà dell'oggetto rappresentata dall'opzione selezionata sarà associata al modello identificato dalla direttiva ngModel. $scope.elencoCitta = ["Roma", "Milano", "Napoli", "Palermo"]; <select ng-model="selectedItem"> <option ng-repeat="citta in elencoCitta" value="{{citta}}">{{citta}}</option> </select>
  • 43. Corso base AngularJS Beniamino Ferrari 43 Ng-Options (4) ● In questo caso possiamo utilizzare un array di oggetti come mostrato di seguito: $scope.elencoCitta = [ {codice: "RM", nome: "Roma"}, {codice: "MI", nome: "Milano"}, {codice: "NA", nome: "Napoli"}, {codice: "PA", nome:"Palermo"} ]; <select ng-model="selectedItem"> <option ng-repeat="citta in elencoCitta" value="{{citta.codice}}">{{citta.nome}}</option> </select> <p ng-if="selectedItem">Hai selezionato {{selectedItem}}!</p> Può essere scritto molto più semplicemente con ng-option <select ng-model="selectedItem" ng-options="citta.nome for citta in elencoCitta"> </select>
  • 44. Corso base AngularJS Beniamino Ferrari 44 Ng-Options (5) ● Un’altra interessante variante consente di raggruppare le voci della select. Per fare un esempio, supponiamo di avere il seguente array: $scope.elencoCitta = [ {codice: "RM", nome: "Roma", regione: "Lazio"}, {codice: "LT", nome: "Latina", regione: "Lazio"}, {codice: "MI", nome: "Milano" regione: "Lombardia"}, {codice: "NA", nome: "Napoli" regione: "Campania"}, {codice: "CO", nome: "Como" regione: "Lombardia"}, {codice: "PA", nome:"Palermo", regione: "Sicilia"}, {codice: "CA", nome: "Caserta" regione: "Campania"}, {codice: "AV", nome: "Avellino" regione: "Campania"}, {codice: "TP", nome:"Trapani", regione: "Sicilia"}, {codice: "AG", nome:"Agrigento", regione: "Sicilia"} ]; <select ng-model="selectedItem" ng-options="citta.nome group by citta.regione for citta in elencoCitta"> </select>
  • 45. Corso base AngularJS Beniamino Ferrari 45 Ng-Options (6)
  • 46. Corso base AngularJS Beniamino Ferrari 46 Ng-Options (7) ● ng-options abbiamo la possibilità di iterare sulle proprietà di un oggetto. Pertanto, se abbiamo il seguente oggetto: $scope.citta = {codice: "RM", nome: "Roma", regione: "Lazio"}; <select ng-model="selectedItem" ng-options="value for (key, value) in citta"> </select>
  • 47. Corso base AngularJS Beniamino Ferrari 47 Direttive di evento ● AngularJS prevede una serie di direttive per gestire gli eventi di interazione dell’utente con l’interfaccia grafica. Tra le più usate – ng-click – ng-dbl-click – ng-mousedown – ng-mouseup – ng-mouseenter – ng-mouseleave – ng-mousemove – ng-mouseover – ng-keydown – ng-keyup – ng-keypress – ng-change
  • 48. Corso base AngularJS Beniamino Ferrari 48 ng-click <div> <input type="number" ng-model="numero1"/> + <input type="number" ng-model="numero2"/> = <input type="number" ng-model="risultato"/> </div> <button ng-click="risultato = numero1 + numero2">Somma</button> In maniera equivalente <button ng-click="somma()">Somma</button> $scope.somma = function() { $scope.risultato = $scope.numero1 + $scope.numero2; }
  • 49. Corso base AngularJS Beniamino Ferrari 49 ng-cloak ● la direttiva ng-cloak viene utilizzata per impedire che il model venga visualizzato dal browser nel suo formato non formattato (non compilato) al moento del caricamento. ● Questa direttiva viene utilizzata evitare l'effetto sfarfallio indesiderato causato dalla visualizzazione del template html.