SlideShare a Scribd company logo
1 of 26
AngularJS: Routing
Single Page Application
Il continuo ricaricamento delle pagine nei siti web
tradizionali:
● disturba la user experience;
● prestazioni generalmente scadenti;
● fastidiose su desktop;
● ingestibili su mobile.
Single Page Application
Le SPA (Single Page Application):
● esperienza di navigazione fluida;
● rendering asincrono di parti della pagina;
● Gmail.
Strumenti maggiormente usati:
● Jquery
● Ajax
Single Page Application
Vantaggi:
● ottima user experience;
● velocità;
● mobile friendly.
Svantaggi:
● ottima conoscenza di javascript;
● strumenti meno evoluti;
● codice meno strutturato.
Single Page Application
SPA con AngularJS
Come gestire il cambio pagina di una single-page application con AngularJs?
<HTML>
...
<div class="container" ng-view>
...
</HTML>
La direttiva ng-view può essere vista come un
segnaposto per il modulo $route.
E’ il posto dove le view verranno innestate.
Route
Per definire le regole di routing bisogna:
● Importare la lib angular-route
<script src="angular-route.js">
● Dichiarare la dipendenza dal module ngRoute
var App = angular.module('WorkshopApp',
['ngRoute']);
Route
var App = angular.module('engWs', ['ngRoute']);
App.config(['$routeProvider', function($routeProvider) {
// Le regole di routing vanno definite qui
}]);
$routeProvider.when('/home', {
templateUrl : 'html/home.html'
});
$routeProvider.when('/rubrica', {
templateUrl : 'html/rubrica/lista.html',
controller : 'rubricaController’
'
});
Il route di moduli o app va
definito nella funzione config
Per aggiungere un route
specifico dobbiamo usare il
metodo when
Route
$routeProvider.otherwise({redirectTo: '/home'});
Se nessuna regola è
soddisfatta, viene chiamato il
metodo otherwise
Route - template o templateUrl
$routeProvider.when('/home', {
template : '<h1>HOME</h1>'
});
$routeProvider.when('/rubrica', {
templateUrl : 'html/rubrica/lista.html',
controller : 'rubricaController
'
});
Posso indicare l’url del template ma
anche definirlo direttamente nella
regola di routing.
Route - Controller
Dov’è definito rubricaController?
angular.module('engWs')
.controller('rubricaController',
['$scope', '$http', '$location', function($scope, $http,
$location){
//Some logic
}
rubrica-controller.js
<html>
…
<script type="text/javascript" src="rubrica/rubrica-controller.js"></script>
</html>
index.html
Route - Controller
// alternativa poco elegante
$routeProvider.when('/rubrica', {
templateUrl : 'html/rubrica/lista.html',
controller : function($scope){...}
});
Posso scrivere la funzione controller
direttamente nella regola di routing
Resolve
Dati caricati prima del caricamento del controller e del render della view:
● Es. caricamento drop down
$routeProvider.when('/rubrica', {
templateUrl : 'html/rubrica/rubrica.html',
controller : 'rubricaController',
resolve: {
'tipiUtente': ['$http', function($http) {
return $http.get('/api').then(
function success(resp) { return response.data; }
function error(reason) { return false; }
);
}]
}
});
Resolve
// Recupero nel controller
angular.module('engWs')
.controller('rubricaController', ['tipiUtente', ...
function(tipiUtente, ...){
// recupero
$scope.tipiUtente = tipiUtente.data;
}]);
$routeParams
Se in una regola di routing è presente il “:” AngularJS esclude dalla regola tutto
ciò che viene dopo e lo inserisce in $routeParams
// Regola di routing
$routeProvider.when('/contatto-edit/:id', {
templateUrl : 'rubrica/contatto/dettaglioContatto.html',
controller : 'dettaglioContattoController'
});
$routeParams
// Recupero nel controller
angular.module('engWs')
.controller('dettaglioContattoController', [ '$routeParams', ...
function($routeParams, ...){
// recupero l’id
var id = $routeParams.id
}]);
$location
Servizio che integra windows.location nell’applicazione Angular.
Metodi:
● path - get del path corrente
o $location.path(); // returns the current path
o $location.path('/'); // change the path to the '/' route
● replace - redirect con return button disabilitato (es. dopo il login)
o $location.path('/home').replace();
● host - host dell’url corrente
o $location.host(); // host of the current url
● ...
Active menu
<body ng-app="engWs" ng-controller="indexController">
...
<ul class="nav navbar-nav">
<li ng-class="isActive('/rubrica')"><a href="#rubrica">Rubrica</a></li>
<li ng-class="isActive('/auth')"><a href="#auth">Autenticazione</a></li>
<li ng-class="isActive('/sicurezza')"><a href="#sicurezza">Sicurezza</a></li>
</ul>
...
</body>
Active menu
angular.module('engWs')
.controller('indexController', ['$scope', '$location', function($scope, $location)
{
// definizione variabile globale per gestione active menu
$scope.isActive = function(path) {
if ($location.path().substr(0, path.length) == path) {
return "active";
} else {
return "";
}
};
}]);
Routing Modes
Determina come deve essere l’URL del sito:
● Hashbang Mode, (default)
o http://yoursite.com/#/inbox/all
angular.module('myApp', ['ngRoute'])
.config(['$locationProvider', function($locationProvider) {
$locationProvider.html5Mode(false); // non indispensabile
$locationProvider.hashPrefix('!');
}]);
o http://yoursite.com/#!/inbox/all
Routing Modes
Determina come deve essere l’URL del sito:
● HTML5 Mode, aspetto di URL regolare tranne che nei
browser più vecchi
o http://yoursite.com/inbox/all
angular.module('myApp', ['ngRoute'])
.config(['$locationProvider', function($locationProvider) {
$locationProvider.html5Mode(true); // indispensabile
}]);
Routing Modes - Example
Link: <a href="/rubrica/">Person</a>
● Hashbang /index.html#/rubrica
● HTML5 /index.html/rubrica
Routing Modes - Base Url
E’ possibile settare l’URL base nell’head dell’HTML
<html>
<head>
<base href="/base/url" />
</head>
…
</html>
Routing Events
E’ possibile introdurre comportamenti custom in diversi
momenti del flusso di routing:
● $routeChangeStart, avviene quando il route service
inizia a risolvere tutte le dipendenze (resolve)
angular.module('myApp', [])
.run(['$rootScope', '$location',
function($rootScope, $location) {
$rootScope.$on('$routeChangeStart',
function(evt, next, current) {
})
}])
evt è l’evento
next e current sono rispettivamente il
nuovo route e quello corrente
Routing Events
● $routeChangeSuccess, avviene quando il route service
ha risolto tutte le dipendenze (resolve)
angular.module('myApp', [])
.run(['$rootScope', '$location',
function($rootScope, $location) {
$rootScope.$on('$routeChangeSuccess',
function(evt, next, previous) {
})
}])
evt è l’evento
next e previous sono rispettivamente
il nuovo route e quello precedente
Routing Events
● $routeChangeError, avviene in caso di errore
angular.module('myApp', [])
.run(['$rootScope', '$location',
function($rootScope, $location) {
$rootScope.$on('$routeChangeError',
function(current, previous, rejection)
{
})
}])
current, route corrente
previous, route precedente
rejection, è l’errore

More Related Content

What's hot

AngularJS – Reinventare le applicazioni web
AngularJS – Reinventare le applicazioni webAngularJS – Reinventare le applicazioni web
AngularJS – Reinventare le applicazioni webLuca Milan
 
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
 
Slide typescript - net campus
Slide typescript - net campusSlide typescript - net campus
Slide typescript - net campusDotNetCampus
 
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
 
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 4 Community Tour VS2010
Asp.net 4 Community Tour VS2010Asp.net 4 Community Tour VS2010
Asp.net 4 Community Tour VS2010Fabrizio Bernabei
 
Zend Framework Workshop Parte1
Zend Framework Workshop Parte1Zend Framework Workshop Parte1
Zend Framework Workshop Parte1massimiliano.wosz
 
E suap - tecnologie client
E suap - tecnologie client E suap - tecnologie client
E suap - tecnologie client Sabino Labarile
 
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
 
Sviluppo web con Ruby on Rails
Sviluppo web con Ruby on RailsSviluppo web con Ruby on Rails
Sviluppo web con Ruby on Railsjekil
 
Zend Framework Workshop Parte2
Zend Framework Workshop Parte2Zend Framework Workshop Parte2
Zend Framework Workshop Parte2massimiliano.wosz
 
Sviluppo applicazioni in Ruby on Rails
Sviluppo applicazioni in Ruby on RailsSviluppo applicazioni in Ruby on Rails
Sviluppo applicazioni in Ruby on RailsNERDYDOG Web Agency
 
Fe04 angular js-101
Fe04   angular js-101Fe04   angular js-101
Fe04 angular js-101DotNetCampus
 

What's hot (20)

AngularJS – Reinventare le applicazioni web
AngularJS – Reinventare le applicazioni webAngularJS – Reinventare le applicazioni web
AngularJS – Reinventare le applicazioni web
 
Workshop angular
Workshop angularWorkshop angular
Workshop angular
 
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 material
Corso angular js materialCorso angular js material
Corso angular js material
 
Slide typescript - net campus
Slide typescript - net campusSlide typescript - net campus
Slide typescript - net campus
 
Require js
Require jsRequire js
Require js
 
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
 
Corso angular js componenti
Corso angular js componentiCorso angular js componenti
Corso angular js componenti
 
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 4 Community Tour VS2010
Asp.net 4 Community Tour VS2010Asp.net 4 Community Tour VS2010
Asp.net 4 Community Tour VS2010
 
JavaScript
JavaScriptJavaScript
JavaScript
 
Zend Framework Workshop Parte1
Zend Framework Workshop Parte1Zend Framework Workshop Parte1
Zend Framework Workshop Parte1
 
E suap - tecnologie client
E suap - tecnologie client E suap - tecnologie client
E suap - tecnologie client
 
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
 
ReactJS for beginners
ReactJS for beginnersReactJS for beginners
ReactJS for beginners
 
Sviluppo web con Ruby on Rails
Sviluppo web con Ruby on RailsSviluppo web con Ruby on Rails
Sviluppo web con Ruby on Rails
 
Corso angular js base
Corso angular js baseCorso angular js base
Corso angular js base
 
Zend Framework Workshop Parte2
Zend Framework Workshop Parte2Zend Framework Workshop Parte2
Zend Framework Workshop Parte2
 
Sviluppo applicazioni in Ruby on Rails
Sviluppo applicazioni in Ruby on RailsSviluppo applicazioni in Ruby on Rails
Sviluppo applicazioni in Ruby on Rails
 
Fe04 angular js-101
Fe04   angular js-101Fe04   angular js-101
Fe04 angular js-101
 

Similar to Angular js: routing

Levate l'ancora! Rotte senza problemi con ZF2
Levate l'ancora! Rotte senza problemi con ZF2Levate l'ancora! Rotte senza problemi con ZF2
Levate l'ancora! Rotte senza problemi con ZF2Diego Drigani
 
Ldb 25 strumenti gis e webgis_2014-05-29e30 de lorenzis - api di google maps
Ldb 25 strumenti gis e webgis_2014-05-29e30 de lorenzis - api di google mapsLdb 25 strumenti gis e webgis_2014-05-29e30 de lorenzis - api di google maps
Ldb 25 strumenti gis e webgis_2014-05-29e30 de lorenzis - api di google mapslaboratoridalbasso
 
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
 
Fare con Zend Framework 2 ciò che facevo con ZF1
Fare con Zend Framework 2 ciò che facevo con ZF1Fare con Zend Framework 2 ciò che facevo con ZF1
Fare con Zend Framework 2 ciò che facevo con ZF1Steve Maraspin
 
Luca Masini: Introduzione a GWT 2.0
Luca Masini: Introduzione a GWT 2.0Luca Masini: Introduzione a GWT 2.0
Luca Masini: Introduzione a GWT 2.0firenze-gtug
 
Android Widget @ whymca 2011
Android Widget @ whymca 2011Android Widget @ whymca 2011
Android Widget @ whymca 2011Fabio Collini
 
Acadevmy - Angular Overview
Acadevmy - Angular OverviewAcadevmy - Angular Overview
Acadevmy - Angular OverviewFrancesco Sciuti
 
Reccomandation engine with GraphDB
Reccomandation engine with GraphDBReccomandation engine with GraphDB
Reccomandation engine with GraphDBPiero Bozzolo
 
Mantenere una distribuzione Drupal attraverso test coverage: Paddle case study
Mantenere una distribuzione Drupal attraverso test coverage: Paddle case studyMantenere una distribuzione Drupal attraverso test coverage: Paddle case study
Mantenere una distribuzione Drupal attraverso test coverage: Paddle case studyDrupalDay
 
5 consigli SEO da tenere a mente durante lo sviluppo di temi e plugin @ WpCam...
5 consigli SEO da tenere a mente durante lo sviluppo di temi e plugin @ WpCam...5 consigli SEO da tenere a mente durante lo sviluppo di temi e plugin @ WpCam...
5 consigli SEO da tenere a mente durante lo sviluppo di temi e plugin @ WpCam...Andrea Cardinali
 
Stanco delle solite Web App? Passa al Prgressive
Stanco delle solite Web App? Passa al PrgressiveStanco delle solite Web App? Passa al Prgressive
Stanco delle solite Web App? Passa al PrgressiveCommit University
 
Drupal Day 2012 - Applicazioni mobile multipiattaforma integrate con Drupal 7...
Drupal Day 2012 - Applicazioni mobile multipiattaforma integrate con Drupal 7...Drupal Day 2012 - Applicazioni mobile multipiattaforma integrate con Drupal 7...
Drupal Day 2012 - Applicazioni mobile multipiattaforma integrate con Drupal 7...DrupalDay
 
Non Conventional Android Programming (Italiano)
Non Conventional Android Programming (Italiano)Non Conventional Android Programming (Italiano)
Non Conventional Android Programming (Italiano)Davide Cerbo
 
Front-end: Guide for developers - Edit by Lorenzo Stacchio
Front-end: Guide for developers - Edit by Lorenzo StacchioFront-end: Guide for developers - Edit by Lorenzo Stacchio
Front-end: Guide for developers - Edit by Lorenzo StacchioLorenzostacchio
 
Come Drupal costruisce le tue pagine
Come Drupal costruisce le tue pagineCome Drupal costruisce le tue pagine
Come Drupal costruisce le tue paginesparkfabrik
 
MAGENTO 2: Routing e Controllers - Paolo Vecchiocattivi
MAGENTO 2: Routing e Controllers - Paolo VecchiocattiviMAGENTO 2: Routing e Controllers - Paolo Vecchiocattivi
MAGENTO 2: Routing e Controllers - Paolo VecchiocattiviMageSpecialist
 
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
 
Seam unifies Java EE by Massimiliano Ciccazzo
Seam unifies Java EE by Massimiliano CiccazzoSeam unifies Java EE by Massimiliano Ciccazzo
Seam unifies Java EE by Massimiliano CiccazzoJava User Group Roma
 

Similar to Angular js: routing (20)

Levate l'ancora! Rotte senza problemi con ZF2
Levate l'ancora! Rotte senza problemi con ZF2Levate l'ancora! Rotte senza problemi con ZF2
Levate l'ancora! Rotte senza problemi con ZF2
 
Yagwto
YagwtoYagwto
Yagwto
 
Ldb 25 strumenti gis e webgis_2014-05-29e30 de lorenzis - api di google maps
Ldb 25 strumenti gis e webgis_2014-05-29e30 de lorenzis - api di google mapsLdb 25 strumenti gis e webgis_2014-05-29e30 de lorenzis - api di google maps
Ldb 25 strumenti gis e webgis_2014-05-29e30 de lorenzis - api di google maps
 
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
 
Fare con Zend Framework 2 ciò che facevo con ZF1
Fare con Zend Framework 2 ciò che facevo con ZF1Fare con Zend Framework 2 ciò che facevo con ZF1
Fare con Zend Framework 2 ciò che facevo con ZF1
 
Luca Masini: Introduzione a GWT 2.0
Luca Masini: Introduzione a GWT 2.0Luca Masini: Introduzione a GWT 2.0
Luca Masini: Introduzione a GWT 2.0
 
Android Widget @ whymca 2011
Android Widget @ whymca 2011Android Widget @ whymca 2011
Android Widget @ whymca 2011
 
Acadevmy - Angular Overview
Acadevmy - Angular OverviewAcadevmy - Angular Overview
Acadevmy - Angular Overview
 
Reccomandation engine with GraphDB
Reccomandation engine with GraphDBReccomandation engine with GraphDB
Reccomandation engine with GraphDB
 
Html5 e PHP
Html5 e PHPHtml5 e PHP
Html5 e PHP
 
Mantenere una distribuzione Drupal attraverso test coverage: Paddle case study
Mantenere una distribuzione Drupal attraverso test coverage: Paddle case studyMantenere una distribuzione Drupal attraverso test coverage: Paddle case study
Mantenere una distribuzione Drupal attraverso test coverage: Paddle case study
 
5 consigli SEO da tenere a mente durante lo sviluppo di temi e plugin @ WpCam...
5 consigli SEO da tenere a mente durante lo sviluppo di temi e plugin @ WpCam...5 consigli SEO da tenere a mente durante lo sviluppo di temi e plugin @ WpCam...
5 consigli SEO da tenere a mente durante lo sviluppo di temi e plugin @ WpCam...
 
Stanco delle solite Web App? Passa al Prgressive
Stanco delle solite Web App? Passa al PrgressiveStanco delle solite Web App? Passa al Prgressive
Stanco delle solite Web App? Passa al Prgressive
 
Drupal Day 2012 - Applicazioni mobile multipiattaforma integrate con Drupal 7...
Drupal Day 2012 - Applicazioni mobile multipiattaforma integrate con Drupal 7...Drupal Day 2012 - Applicazioni mobile multipiattaforma integrate con Drupal 7...
Drupal Day 2012 - Applicazioni mobile multipiattaforma integrate con Drupal 7...
 
Non Conventional Android Programming (Italiano)
Non Conventional Android Programming (Italiano)Non Conventional Android Programming (Italiano)
Non Conventional Android Programming (Italiano)
 
Front-end: Guide for developers - Edit by Lorenzo Stacchio
Front-end: Guide for developers - Edit by Lorenzo StacchioFront-end: Guide for developers - Edit by Lorenzo Stacchio
Front-end: Guide for developers - Edit by Lorenzo Stacchio
 
Come Drupal costruisce le tue pagine
Come Drupal costruisce le tue pagineCome Drupal costruisce le tue pagine
Come Drupal costruisce le tue pagine
 
MAGENTO 2: Routing e Controllers - Paolo Vecchiocattivi
MAGENTO 2: Routing e Controllers - Paolo VecchiocattiviMAGENTO 2: Routing e Controllers - Paolo Vecchiocattivi
MAGENTO 2: Routing e Controllers - Paolo Vecchiocattivi
 
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
 
Seam unifies Java EE by Massimiliano Ciccazzo
Seam unifies Java EE by Massimiliano CiccazzoSeam unifies Java EE by Massimiliano Ciccazzo
Seam unifies Java EE by Massimiliano Ciccazzo
 

Angular js: routing

  • 2. Single Page Application Il continuo ricaricamento delle pagine nei siti web tradizionali: ● disturba la user experience; ● prestazioni generalmente scadenti; ● fastidiose su desktop; ● ingestibili su mobile.
  • 3. Single Page Application Le SPA (Single Page Application): ● esperienza di navigazione fluida; ● rendering asincrono di parti della pagina; ● Gmail. Strumenti maggiormente usati: ● Jquery ● Ajax
  • 4. Single Page Application Vantaggi: ● ottima user experience; ● velocità; ● mobile friendly. Svantaggi: ● ottima conoscenza di javascript; ● strumenti meno evoluti; ● codice meno strutturato.
  • 6. SPA con AngularJS Come gestire il cambio pagina di una single-page application con AngularJs? <HTML> ... <div class="container" ng-view> ... </HTML> La direttiva ng-view può essere vista come un segnaposto per il modulo $route. E’ il posto dove le view verranno innestate.
  • 7. Route Per definire le regole di routing bisogna: ● Importare la lib angular-route <script src="angular-route.js"> ● Dichiarare la dipendenza dal module ngRoute var App = angular.module('WorkshopApp', ['ngRoute']);
  • 8. Route var App = angular.module('engWs', ['ngRoute']); App.config(['$routeProvider', function($routeProvider) { // Le regole di routing vanno definite qui }]); $routeProvider.when('/home', { templateUrl : 'html/home.html' }); $routeProvider.when('/rubrica', { templateUrl : 'html/rubrica/lista.html', controller : 'rubricaController’ ' }); Il route di moduli o app va definito nella funzione config Per aggiungere un route specifico dobbiamo usare il metodo when
  • 9. Route $routeProvider.otherwise({redirectTo: '/home'}); Se nessuna regola è soddisfatta, viene chiamato il metodo otherwise
  • 10. Route - template o templateUrl $routeProvider.when('/home', { template : '<h1>HOME</h1>' }); $routeProvider.when('/rubrica', { templateUrl : 'html/rubrica/lista.html', controller : 'rubricaController ' }); Posso indicare l’url del template ma anche definirlo direttamente nella regola di routing.
  • 11. Route - Controller Dov’è definito rubricaController? angular.module('engWs') .controller('rubricaController', ['$scope', '$http', '$location', function($scope, $http, $location){ //Some logic } rubrica-controller.js <html> … <script type="text/javascript" src="rubrica/rubrica-controller.js"></script> </html> index.html
  • 12. Route - Controller // alternativa poco elegante $routeProvider.when('/rubrica', { templateUrl : 'html/rubrica/lista.html', controller : function($scope){...} }); Posso scrivere la funzione controller direttamente nella regola di routing
  • 13. Resolve Dati caricati prima del caricamento del controller e del render della view: ● Es. caricamento drop down $routeProvider.when('/rubrica', { templateUrl : 'html/rubrica/rubrica.html', controller : 'rubricaController', resolve: { 'tipiUtente': ['$http', function($http) { return $http.get('/api').then( function success(resp) { return response.data; } function error(reason) { return false; } ); }] } });
  • 14. Resolve // Recupero nel controller angular.module('engWs') .controller('rubricaController', ['tipiUtente', ... function(tipiUtente, ...){ // recupero $scope.tipiUtente = tipiUtente.data; }]);
  • 15. $routeParams Se in una regola di routing è presente il “:” AngularJS esclude dalla regola tutto ciò che viene dopo e lo inserisce in $routeParams // Regola di routing $routeProvider.when('/contatto-edit/:id', { templateUrl : 'rubrica/contatto/dettaglioContatto.html', controller : 'dettaglioContattoController' });
  • 16. $routeParams // Recupero nel controller angular.module('engWs') .controller('dettaglioContattoController', [ '$routeParams', ... function($routeParams, ...){ // recupero l’id var id = $routeParams.id }]);
  • 17. $location Servizio che integra windows.location nell’applicazione Angular. Metodi: ● path - get del path corrente o $location.path(); // returns the current path o $location.path('/'); // change the path to the '/' route ● replace - redirect con return button disabilitato (es. dopo il login) o $location.path('/home').replace(); ● host - host dell’url corrente o $location.host(); // host of the current url ● ...
  • 18. Active menu <body ng-app="engWs" ng-controller="indexController"> ... <ul class="nav navbar-nav"> <li ng-class="isActive('/rubrica')"><a href="#rubrica">Rubrica</a></li> <li ng-class="isActive('/auth')"><a href="#auth">Autenticazione</a></li> <li ng-class="isActive('/sicurezza')"><a href="#sicurezza">Sicurezza</a></li> </ul> ... </body>
  • 19. Active menu angular.module('engWs') .controller('indexController', ['$scope', '$location', function($scope, $location) { // definizione variabile globale per gestione active menu $scope.isActive = function(path) { if ($location.path().substr(0, path.length) == path) { return "active"; } else { return ""; } }; }]);
  • 20. Routing Modes Determina come deve essere l’URL del sito: ● Hashbang Mode, (default) o http://yoursite.com/#/inbox/all angular.module('myApp', ['ngRoute']) .config(['$locationProvider', function($locationProvider) { $locationProvider.html5Mode(false); // non indispensabile $locationProvider.hashPrefix('!'); }]); o http://yoursite.com/#!/inbox/all
  • 21. Routing Modes Determina come deve essere l’URL del sito: ● HTML5 Mode, aspetto di URL regolare tranne che nei browser più vecchi o http://yoursite.com/inbox/all angular.module('myApp', ['ngRoute']) .config(['$locationProvider', function($locationProvider) { $locationProvider.html5Mode(true); // indispensabile }]);
  • 22. Routing Modes - Example Link: <a href="/rubrica/">Person</a> ● Hashbang /index.html#/rubrica ● HTML5 /index.html/rubrica
  • 23. Routing Modes - Base Url E’ possibile settare l’URL base nell’head dell’HTML <html> <head> <base href="/base/url" /> </head> … </html>
  • 24. Routing Events E’ possibile introdurre comportamenti custom in diversi momenti del flusso di routing: ● $routeChangeStart, avviene quando il route service inizia a risolvere tutte le dipendenze (resolve) angular.module('myApp', []) .run(['$rootScope', '$location', function($rootScope, $location) { $rootScope.$on('$routeChangeStart', function(evt, next, current) { }) }]) evt è l’evento next e current sono rispettivamente il nuovo route e quello corrente
  • 25. Routing Events ● $routeChangeSuccess, avviene quando il route service ha risolto tutte le dipendenze (resolve) angular.module('myApp', []) .run(['$rootScope', '$location', function($rootScope, $location) { $rootScope.$on('$routeChangeSuccess', function(evt, next, previous) { }) }]) evt è l’evento next e previous sono rispettivamente il nuovo route e quello precedente
  • 26. Routing Events ● $routeChangeError, avviene in caso di errore angular.module('myApp', []) .run(['$rootScope', '$location', function($rootScope, $location) { $rootScope.$on('$routeChangeError', function(current, previous, rejection) { }) }]) current, route corrente previous, route precedente rejection, è l’errore

Editor's Notes

  1. strumenti meno evoluti: Non ci sono ide di sviluppo paragonabili ad esempio a VS per le tecnologie lato client ma i nuovi software stanno facendo passi da gigante (es. WebStorm); codice meno strutturato: solitamente le SPA sono implementate con jquery e ajax. Approccio imperativo
  2. Per segnalare ad angular dove renderizzare l’HTML del template che vogliamo visualizzare abbiamo bisogno della direttiva ng-view e del modulo $route
  3. Il servizio $location risolve il problema adattando l’URL per i browser più vecchi. In sostanza usa la modalità Hashbang