SlideShare une entreprise Scribd logo
1  sur  23
Télécharger pour lire hors ligne
HTML enhanced for web apps! 
Introduzione al mondo di AngularJS 
vitconte@gmail.com
Cos’è 
Framework JavaScript pensato per semplificare 
e velocizzare la realizzazione di applicazioni 
web dinamiche.
Come 
● arricchendo l’HTML con elementi e attributi 
● consentendo la modifica dinamica dei contenuti della view 
● separando la logica di business da quella di presentazione
La potenza in Hello Word! 
1. <html> 
2. <head> 
3. <script src="https://ajax.googleapis.com/ajax/ 
4. libs/angularjs/1.2.7/angular.min.js"></script> 
5. </head> 
6. <body> 
7. <div ng-app> 
8. <label>Name:</label> 
9. <input type="text" ng-model="yourName" 
placeholder="Enter a name here"> 
10. <hr> 
11. <h1>Hello {{yourName}}!</h1> 
12. </div> 
13. </body> 
14. </html> 
Angular provvederà ad aggiornare il 
valore della proprietà yourName in tutti 
gli elementi della pagina che la 
richiamano
L’essenziale 
1. <html> 
2. <head> 
3. <script src="https://ajax.googleapis.com/ajax/ 
4. libs/angularjs/1.2.7/angular.min.js"></script> 
5. </head> 
6. <body> 
7. <div ng-app> 
8. ... 
9. </div> 
10. </body> 
11. </html> 
angular.min.js: la libreria 
ng-app: confini di un’ 
applicazione angularjs
Cosa succede 
● L’HTML è un linguaggio di murkup per la creazione di ipertesti 
● Il browser traduce L’HTML nel DOM (Document Object Model), quindi 
scatena l’evento Ready() 
● Angular cattura questo evento ed entra in gioco riscrivendo il DOM o parte 
di esso 
● Quale? Quello nei confini di ng-app
Il binding 
1. … 
2. <label>Name:</label> 
3. <input type="text" ng-model="yourName" 
placeholder="Enter a name here"> 
4. <hr> 
5. <h1>Hello {{yourName}}!</h1> 
6. ... 
entrambi quest elementi sono legati alla 
stessa variabile del modello yourName 
Sarà Angular a mantenere aggiornati gli elementi del DOM rispetto le proprietà del Modello
Tipi di binding 
● Data binding unidirezionale {{}} o ng-bind 
○ è il modello a dettare legge 
● Data binding bidirezionale ng-model 
○ il modello e la view sono sincronizzati 
● One-time binding {{::nomeProprietà}} 
○ la view è un’istantanea del modello al render della pagina
Come avviene il binding 
Durante il bootstrap dell’applicazione angular: 
● ricerca gli elementi e gli attributi aggiunti all’HTML, le direttive 
● crea dei listner per ognuno di questi elementi in modo da poter gestire la 
sincronizzazione tra esso e gli elementi del modello
Direttive 
Tutti quegli attributi e quelle notazioni che non sono parte dell’HTML ma che vengono utilizzate da 
AngularJS per estendere lo stesso sono chiamate direttive 
1. <body> 
2. <div ng-app> 
3. ... 
4. </div> 
5. </body> 
1. <label>Name:</label> 
2. <input type="text" ng-model="yourName" 
placeholder="Enter a name here"> 
3. <hr> 
... 
ng-bind 
... 
ng-repeat
Architettura 
Sebbene si ha una certa flessibilità nello sviluppo di applicazioni con AngularJS 
si dovranno comunque definire un Modello, una View e un Controller: 
● Un modello contenente dati che rappresentano lo stato corrente dell’ 
applicazione 
● Una vista che visualizza questi dati 
● Un controller che gestisce l’interazione tra il modello e la vista
Il pattern MVW 
● AngularJS è stato spesso accostato al pattern MVC 
● Ultimamente è stato accostato al pattern MVVM (l’oggetto $scope viene considerato come un 
ViewMode) 
● In realtà secondo gli autori AngularJS adotta il pattern MVW (Model View Whatever), dove 
Whatever sta per qualsiasi cosa sia adatta al vostro caso. 
Having said, I'd rather see developers build kick-ass apps that are 
well-designed and follow separation of concerns, than see them waste 
time arguing about MV* nonsense. And for this reason, I hereby 
declare AngularJS to be MVW framework - Model-View-Whatever. Where 
Whatever stands for "whatever works for you".
Architettura esempio 
1. <body ng-app> 
2. <div ng-controller="HelloController"> 
3. <label>Name:</label> 
4. <input type="text" ng-model="yourName" placeholder="Enter a 
name here"> 
5. <input type="button" value="Reset" ng-click="Reset()"> 
6. <hr> 
7. <h1>Hello {{yourName}}!</h1> 
8. </div> 
9. </body> function HelloController($scope) { 
$scope.yourName = 'No Name'; 
$scope.Reset = function() { 
$scope.yourName = 'No Name'; 
}; 
}
Model 
● L’intera applicazione è guidata dal modello 
● Rispecchia lo stato dell’applicazione 
● Determina quali viste mostrare 
● Cosa mostrare nelle viste 
● Dove lo trovo? $scope 
function HelloController($scope) { 
$scope.yourName = 'No Name'; 
$scope.Reset = function() { 
$scope.yourName = 'No Name'; 
}; 
} 
<input type=”text” ng-model=“yourName” /> 
<h1>Hello {{yourName}}</h1>
Controller 
● Simile al code behind di .net 
● Possono essercene diversi 
○ ognuno ha effetto entro i confini del 
suo ng-controller 
● Definisce la logica di business 
● Inizializza il modello 
● Definisce le operazioni possibili sul modello 
1. <div ng-controller=“HelloController”> 
2. … 
3. </div> 
function HelloController($scope) { 
$scope.yourName = 'No Name'; 
$scope.Reset = function() { 
$scope.yourName = 'No Name'; 
}; 
}
Template vs View 
... 
<ul> 
Template View 
<li ng-repeat="casa in elencoCase"> 
{{casa.nome}} 
</li> 
</ul> 
... 
... 
<ul> 
<li>Milano</li> 
<li>Roma</li> 
<li>Palermo</li> 
</ul> 
... 
function HelloController($scope) { 
$scope.elencoCase = { 
{name:'casa1', citta:’Milano’}, 
+ = 
{name:'casa2', citta:’Roma’}, 
{name:'casa3', citta:’Palermo’} 
}; 
} 
?
Dependency Injection 
Pattern Architetturale 
Coinvolge almeno tre elementi: 
● una componente dipendente, 
● la dichiarazione delle dipendenze del componente, definite come interface contracts, 
● un injector (chiamato anche provider o container) che crea, a richiesta, le istanze delle classi che 
implementano delle dependency interfaces. 
function HelloController($scope) 
{ 
$scope.yourName = 'No Name'; 
$scope.Reset = function() { 
$scope.yourName = 'No Name'; 
}; 
} 
Componente 
dipendente 
Dichiarazione delle 
dipendenze
Dependency Injection 
Annotation 
// INFERRED 
$injector.invoke(function(serviceA){}); 
// ANNOTATED 
function explicit(serviceA) {}; 
explicit.$inject = ['serviceA']; 
$injector.invoke(explicit); 
// INLINE 
$injector.invoke(['serviceA', function 
(serviceA){}]);
Dependency Injection 
Vantaggi: 
● Favorisce la separazione delle responsabilità tra i componenti 
● Promuove la testabilità 
● Migliora la modularità
Single-page application 
Migliorare l’user experience rendendo fluida la navigazione nelle web application, limitando il ricaricamento solo di 
quelle parti della pagina interessate dalla richiesta (griglie, liste, …). 
Come gestire il cambio pagina di una single-page application con AngularJs? 
… 
<header> 
<h1>Header</h1> 
</header> 
<div class="content"> 
<div ng-view></div> 
</div> 
<footer> 
<h5>Footer</h5> 
</footer> 
… 
La direttiva ng-view può essere vista come un segnaposto per il 
modulo $route. 
E’ il posto dove le view verranno innestate.
Route 
angular.module('myApp', []). 
config(['$routeProvider', function($routeProvider) { 
// Le regole di routing vanno definite qui 
}]); 
angular.module('myApp', []). 
config(['$routeProvider', function($routeProvider) { 
$routeProvider 
.when('/', { 
templateUrl: 'views/home.html', 
controller: 'HomeController' 
}); 
}]); 
Il route di moduli o app va 
definito nella funzione config 
Per aggiungere un route 
specifico dobbiamo usare il 
metodo when
Route 
angular.module('myApp', []). 
config(['$routeProvider', function($routeProvider) { 
$routeProvider 
.when('/', { 
templateUrl: 'views/home.html', 
controller: 'HomeController' 
}); 
.otherwise({redirectTo: '/'}); 
}]); 
Se nessuna regola è 
soddisfatta, viene chiamato il 
metodo otherwise
Riferimenti 
● Email: vitconte@gmail.com 
● LinkedIn: http://www.linkedin.com/pub/vittorio-conte/30/29a/191 
● AngularJS Italia 
○ LinkedIn: https://www.linkedin.com/groups/AngularJS-Italia-7442742 
○ Twitter: @AngularJSItalia

Contenu connexe

Tendances

AngularJS – Reinventare le applicazioni web
AngularJS – Reinventare le applicazioni webAngularJS – Reinventare le applicazioni web
AngularJS – Reinventare le applicazioni webLuca Milan
 
Slide typescript - net campus
Slide typescript - net campusSlide typescript - net campus
Slide typescript - net campusDotNetCampus
 
Migliora il tuo codice con knockout.js
Migliora il tuo codice con knockout.jsMigliora il tuo codice con knockout.js
Migliora il tuo codice con knockout.jsAndrea Dottor
 
Asp.net 4 Community Tour VS2010
Asp.net 4 Community Tour VS2010Asp.net 4 Community Tour VS2010
Asp.net 4 Community Tour VS2010Fabrizio Bernabei
 
Applicazioni Web ultra-performanti con Vue.js e Delphi
Applicazioni Web ultra-performanti con Vue.js e DelphiApplicazioni Web ultra-performanti con Vue.js e Delphi
Applicazioni Web ultra-performanti con Vue.js e DelphiMarco Breveglieri
 
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
 
Sviluppo Web con React e Delphi - Seminario Delphi Day 2016, Piacenza
Sviluppo Web con React e Delphi - Seminario Delphi Day 2016, PiacenzaSviluppo Web con React e Delphi - Seminario Delphi Day 2016, Piacenza
Sviluppo Web con React e Delphi - Seminario Delphi Day 2016, PiacenzaMarco Breveglieri
 
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
 
Zend Framework Workshop Parte1
Zend Framework Workshop Parte1Zend Framework Workshop Parte1
Zend Framework Workshop Parte1massimiliano.wosz
 
Zend Framework Workshop Parte2
Zend Framework Workshop Parte2Zend Framework Workshop Parte2
Zend Framework Workshop Parte2massimiliano.wosz
 
Tech Webinar: Test e2e per AngularJS e non solo
Tech Webinar: Test e2e per AngularJS e non soloTech Webinar: Test e2e per AngularJS e non solo
Tech Webinar: Test e2e per AngularJS e non soloCodemotion
 
Drupal diventa un CMF e WordPress che fa? Slide WordCamp Milano 2019
Drupal diventa un CMF e WordPress che fa? Slide WordCamp Milano 2019Drupal diventa un CMF e WordPress che fa? Slide WordCamp Milano 2019
Drupal diventa un CMF e WordPress che fa? Slide WordCamp Milano 2019Matteo Enna
 
Sviluppo web con Ruby on Rails
Sviluppo web con Ruby on RailsSviluppo web con Ruby on Rails
Sviluppo web con Ruby on Railsjekil
 

Tendances (20)

Workshop angular
Workshop angularWorkshop angular
Workshop angular
 
AngularJS – Reinventare le applicazioni web
AngularJS – Reinventare le applicazioni webAngularJS – Reinventare le applicazioni web
AngularJS – Reinventare le applicazioni web
 
Slide typescript - net campus
Slide typescript - net campusSlide typescript - net campus
Slide typescript - net campus
 
Corso angular js material
Corso angular js materialCorso angular js material
Corso angular js material
 
Migliora il tuo codice con knockout.js
Migliora il tuo codice con knockout.jsMigliora il tuo codice con knockout.js
Migliora il tuo codice con knockout.js
 
Asp.net 4 Community Tour VS2010
Asp.net 4 Community Tour VS2010Asp.net 4 Community Tour VS2010
Asp.net 4 Community Tour VS2010
 
Corso angular js componenti
Corso angular js componentiCorso angular js componenti
Corso angular js componenti
 
Applicazioni Web ultra-performanti con Vue.js e Delphi
Applicazioni Web ultra-performanti con Vue.js e DelphiApplicazioni Web ultra-performanti con Vue.js e Delphi
Applicazioni Web ultra-performanti con Vue.js e Delphi
 
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...
 
Corso angular js base
Corso angular js baseCorso angular js base
Corso angular js base
 
Require js
Require jsRequire js
Require js
 
Sviluppo Web con React e Delphi - Seminario Delphi Day 2016, Piacenza
Sviluppo Web con React e Delphi - Seminario Delphi Day 2016, PiacenzaSviluppo Web con React e Delphi - Seminario Delphi Day 2016, Piacenza
Sviluppo Web con React e Delphi - Seminario Delphi Day 2016, Piacenza
 
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
 
Zend Framework Workshop Parte1
Zend Framework Workshop Parte1Zend Framework Workshop Parte1
Zend Framework Workshop Parte1
 
ReactJS for beginners
ReactJS for beginnersReactJS for beginners
ReactJS for beginners
 
Zend Framework Workshop Parte2
Zend Framework Workshop Parte2Zend Framework Workshop Parte2
Zend Framework Workshop Parte2
 
Vue.js
Vue.jsVue.js
Vue.js
 
Tech Webinar: Test e2e per AngularJS e non solo
Tech Webinar: Test e2e per AngularJS e non soloTech Webinar: Test e2e per AngularJS e non solo
Tech Webinar: Test e2e per AngularJS e non solo
 
Drupal diventa un CMF e WordPress che fa? Slide WordCamp Milano 2019
Drupal diventa un CMF e WordPress che fa? Slide WordCamp Milano 2019Drupal diventa un CMF e WordPress che fa? Slide WordCamp Milano 2019
Drupal diventa un CMF e WordPress che fa? Slide WordCamp Milano 2019
 
Sviluppo web con Ruby on Rails
Sviluppo web con Ruby on RailsSviluppo web con Ruby on Rails
Sviluppo web con Ruby on Rails
 

Similaire à AngularJS-Intro

Introduzione ad angular 7/8
Introduzione ad angular 7/8Introduzione ad angular 7/8
Introduzione ad angular 7/8Valerio Radice
 
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
 
Niccolò Becchi: Introduzione a GWT
Niccolò Becchi: Introduzione a GWTNiccolò Becchi: Introduzione a GWT
Niccolò Becchi: Introduzione a GWTfirenze-gtug
 
Dependency injection questa sconosciuta
Dependency injection questa sconosciutaDependency injection questa sconosciuta
Dependency injection questa sconosciutaAndrea Dottor
 
Come sviluppare applicazioni cross device con HTML
Come sviluppare applicazioni cross device con HTMLCome sviluppare applicazioni cross device con HTML
Come sviluppare applicazioni cross device con HTMLSinergia Totale
 
E suap - tecnologie client
E suap - tecnologie client E suap - tecnologie client
E suap - tecnologie client Sabino Labarile
 
Hands on MVC - Mastering the Web
Hands on MVC - Mastering the WebHands on MVC - Mastering the Web
Hands on MVC - Mastering the WebClaudio Gandelli
 
Fe02 ria con breeze e knockout
Fe02   ria con breeze e knockoutFe02   ria con breeze e knockout
Fe02 ria con breeze e knockoutDotNetCampus
 
Acadevmy - Angular Overview
Acadevmy - Angular OverviewAcadevmy - Angular Overview
Acadevmy - Angular OverviewFrancesco Sciuti
 
Progetto SOD Davide Sito
Progetto SOD Davide SitoProgetto SOD Davide Sito
Progetto SOD Davide SitoDavide Sito
 
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
 
Cert03 70-486 developing asp.net mvc 4 web applications
Cert03   70-486 developing asp.net mvc 4 web applicationsCert03   70-486 developing asp.net mvc 4 web applications
Cert03 70-486 developing asp.net mvc 4 web applicationsDotNetCampus
 
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
 

Similaire à AngularJS-Intro (20)

Introduzione ad angular 7/8
Introduzione ad angular 7/8Introduzione ad angular 7/8
Introduzione ad angular 7/8
 
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
 
Niccolò Becchi: Introduzione a GWT
Niccolò Becchi: Introduzione a GWTNiccolò Becchi: Introduzione a GWT
Niccolò Becchi: Introduzione a GWT
 
ASP.NET MVC: Full Throttle
ASP.NET MVC: Full ThrottleASP.NET MVC: Full Throttle
ASP.NET MVC: Full Throttle
 
Introduzione a Struts
Introduzione a StrutsIntroduzione a Struts
Introduzione a Struts
 
Novità di Asp.Net 4.0
Novità di Asp.Net 4.0Novità di Asp.Net 4.0
Novità di Asp.Net 4.0
 
Dependency injection questa sconosciuta
Dependency injection questa sconosciutaDependency injection questa sconosciuta
Dependency injection questa sconosciuta
 
Come sviluppare applicazioni cross device con HTML
Come sviluppare applicazioni cross device con HTMLCome sviluppare applicazioni cross device con HTML
Come sviluppare applicazioni cross device con HTML
 
E suap - tecnologie client
E suap - tecnologie client E suap - tecnologie client
E suap - tecnologie client
 
react-it.pdf
react-it.pdfreact-it.pdf
react-it.pdf
 
Hands on MVC - Mastering the Web
Hands on MVC - Mastering the WebHands on MVC - Mastering the Web
Hands on MVC - Mastering the Web
 
Fe02 ria con breeze e knockout
Fe02   ria con breeze e knockoutFe02   ria con breeze e knockout
Fe02 ria con breeze e knockout
 
Acadevmy - Angular Overview
Acadevmy - Angular OverviewAcadevmy - Angular Overview
Acadevmy - Angular Overview
 
MVC2: non solo tecnologia
MVC2: non solo tecnologiaMVC2: non solo tecnologia
MVC2: non solo tecnologia
 
Progetto SOD Davide Sito
Progetto SOD Davide SitoProgetto SOD Davide Sito
Progetto SOD Davide Sito
 
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
 
Knockout.js
Knockout.jsKnockout.js
Knockout.js
 
Cert03 70-486 developing asp.net mvc 4 web applications
Cert03   70-486 developing asp.net mvc 4 web applicationsCert03   70-486 developing asp.net mvc 4 web applications
Cert03 70-486 developing asp.net mvc 4 web applications
 
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?
 

AngularJS-Intro

  • 1. HTML enhanced for web apps! Introduzione al mondo di AngularJS vitconte@gmail.com
  • 2. Cos’è Framework JavaScript pensato per semplificare e velocizzare la realizzazione di applicazioni web dinamiche.
  • 3. Come ● arricchendo l’HTML con elementi e attributi ● consentendo la modifica dinamica dei contenuti della view ● separando la logica di business da quella di presentazione
  • 4. La potenza in Hello Word! 1. <html> 2. <head> 3. <script src="https://ajax.googleapis.com/ajax/ 4. libs/angularjs/1.2.7/angular.min.js"></script> 5. </head> 6. <body> 7. <div ng-app> 8. <label>Name:</label> 9. <input type="text" ng-model="yourName" placeholder="Enter a name here"> 10. <hr> 11. <h1>Hello {{yourName}}!</h1> 12. </div> 13. </body> 14. </html> Angular provvederà ad aggiornare il valore della proprietà yourName in tutti gli elementi della pagina che la richiamano
  • 5. L’essenziale 1. <html> 2. <head> 3. <script src="https://ajax.googleapis.com/ajax/ 4. libs/angularjs/1.2.7/angular.min.js"></script> 5. </head> 6. <body> 7. <div ng-app> 8. ... 9. </div> 10. </body> 11. </html> angular.min.js: la libreria ng-app: confini di un’ applicazione angularjs
  • 6. Cosa succede ● L’HTML è un linguaggio di murkup per la creazione di ipertesti ● Il browser traduce L’HTML nel DOM (Document Object Model), quindi scatena l’evento Ready() ● Angular cattura questo evento ed entra in gioco riscrivendo il DOM o parte di esso ● Quale? Quello nei confini di ng-app
  • 7. Il binding 1. … 2. <label>Name:</label> 3. <input type="text" ng-model="yourName" placeholder="Enter a name here"> 4. <hr> 5. <h1>Hello {{yourName}}!</h1> 6. ... entrambi quest elementi sono legati alla stessa variabile del modello yourName Sarà Angular a mantenere aggiornati gli elementi del DOM rispetto le proprietà del Modello
  • 8. Tipi di binding ● Data binding unidirezionale {{}} o ng-bind ○ è il modello a dettare legge ● Data binding bidirezionale ng-model ○ il modello e la view sono sincronizzati ● One-time binding {{::nomeProprietà}} ○ la view è un’istantanea del modello al render della pagina
  • 9. Come avviene il binding Durante il bootstrap dell’applicazione angular: ● ricerca gli elementi e gli attributi aggiunti all’HTML, le direttive ● crea dei listner per ognuno di questi elementi in modo da poter gestire la sincronizzazione tra esso e gli elementi del modello
  • 10. Direttive Tutti quegli attributi e quelle notazioni che non sono parte dell’HTML ma che vengono utilizzate da AngularJS per estendere lo stesso sono chiamate direttive 1. <body> 2. <div ng-app> 3. ... 4. </div> 5. </body> 1. <label>Name:</label> 2. <input type="text" ng-model="yourName" placeholder="Enter a name here"> 3. <hr> ... ng-bind ... ng-repeat
  • 11. Architettura Sebbene si ha una certa flessibilità nello sviluppo di applicazioni con AngularJS si dovranno comunque definire un Modello, una View e un Controller: ● Un modello contenente dati che rappresentano lo stato corrente dell’ applicazione ● Una vista che visualizza questi dati ● Un controller che gestisce l’interazione tra il modello e la vista
  • 12. Il pattern MVW ● AngularJS è stato spesso accostato al pattern MVC ● Ultimamente è stato accostato al pattern MVVM (l’oggetto $scope viene considerato come un ViewMode) ● In realtà secondo gli autori AngularJS adotta il pattern MVW (Model View Whatever), dove Whatever sta per qualsiasi cosa sia adatta al vostro caso. Having said, I'd rather see developers build kick-ass apps that are well-designed and follow separation of concerns, than see them waste time arguing about MV* nonsense. And for this reason, I hereby declare AngularJS to be MVW framework - Model-View-Whatever. Where Whatever stands for "whatever works for you".
  • 13. Architettura esempio 1. <body ng-app> 2. <div ng-controller="HelloController"> 3. <label>Name:</label> 4. <input type="text" ng-model="yourName" placeholder="Enter a name here"> 5. <input type="button" value="Reset" ng-click="Reset()"> 6. <hr> 7. <h1>Hello {{yourName}}!</h1> 8. </div> 9. </body> function HelloController($scope) { $scope.yourName = 'No Name'; $scope.Reset = function() { $scope.yourName = 'No Name'; }; }
  • 14. Model ● L’intera applicazione è guidata dal modello ● Rispecchia lo stato dell’applicazione ● Determina quali viste mostrare ● Cosa mostrare nelle viste ● Dove lo trovo? $scope function HelloController($scope) { $scope.yourName = 'No Name'; $scope.Reset = function() { $scope.yourName = 'No Name'; }; } <input type=”text” ng-model=“yourName” /> <h1>Hello {{yourName}}</h1>
  • 15. Controller ● Simile al code behind di .net ● Possono essercene diversi ○ ognuno ha effetto entro i confini del suo ng-controller ● Definisce la logica di business ● Inizializza il modello ● Definisce le operazioni possibili sul modello 1. <div ng-controller=“HelloController”> 2. … 3. </div> function HelloController($scope) { $scope.yourName = 'No Name'; $scope.Reset = function() { $scope.yourName = 'No Name'; }; }
  • 16. Template vs View ... <ul> Template View <li ng-repeat="casa in elencoCase"> {{casa.nome}} </li> </ul> ... ... <ul> <li>Milano</li> <li>Roma</li> <li>Palermo</li> </ul> ... function HelloController($scope) { $scope.elencoCase = { {name:'casa1', citta:’Milano’}, + = {name:'casa2', citta:’Roma’}, {name:'casa3', citta:’Palermo’} }; } ?
  • 17. Dependency Injection Pattern Architetturale Coinvolge almeno tre elementi: ● una componente dipendente, ● la dichiarazione delle dipendenze del componente, definite come interface contracts, ● un injector (chiamato anche provider o container) che crea, a richiesta, le istanze delle classi che implementano delle dependency interfaces. function HelloController($scope) { $scope.yourName = 'No Name'; $scope.Reset = function() { $scope.yourName = 'No Name'; }; } Componente dipendente Dichiarazione delle dipendenze
  • 18. Dependency Injection Annotation // INFERRED $injector.invoke(function(serviceA){}); // ANNOTATED function explicit(serviceA) {}; explicit.$inject = ['serviceA']; $injector.invoke(explicit); // INLINE $injector.invoke(['serviceA', function (serviceA){}]);
  • 19. Dependency Injection Vantaggi: ● Favorisce la separazione delle responsabilità tra i componenti ● Promuove la testabilità ● Migliora la modularità
  • 20. Single-page application Migliorare l’user experience rendendo fluida la navigazione nelle web application, limitando il ricaricamento solo di quelle parti della pagina interessate dalla richiesta (griglie, liste, …). Come gestire il cambio pagina di una single-page application con AngularJs? … <header> <h1>Header</h1> </header> <div class="content"> <div ng-view></div> </div> <footer> <h5>Footer</h5> </footer> … La direttiva ng-view può essere vista come un segnaposto per il modulo $route. E’ il posto dove le view verranno innestate.
  • 21. Route angular.module('myApp', []). config(['$routeProvider', function($routeProvider) { // Le regole di routing vanno definite qui }]); angular.module('myApp', []). config(['$routeProvider', function($routeProvider) { $routeProvider .when('/', { templateUrl: 'views/home.html', controller: 'HomeController' }); }]); Il route di moduli o app va definito nella funzione config Per aggiungere un route specifico dobbiamo usare il metodo when
  • 22. Route angular.module('myApp', []). config(['$routeProvider', function($routeProvider) { $routeProvider .when('/', { templateUrl: 'views/home.html', controller: 'HomeController' }); .otherwise({redirectTo: '/'}); }]); Se nessuna regola è soddisfatta, viene chiamato il metodo otherwise
  • 23. Riferimenti ● Email: vitconte@gmail.com ● LinkedIn: http://www.linkedin.com/pub/vittorio-conte/30/29a/191 ● AngularJS Italia ○ LinkedIn: https://www.linkedin.com/groups/AngularJS-Italia-7442742 ○ Twitter: @AngularJSItalia