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=/slideshow/angular-js-routing-50182451/50182451/"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
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; }
);
}]
}
});
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 lid
var id = $routeParams.id
}]);
17. $location
Servizio che integra windows.location nellapplicazione 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 dellurl corrente
o $location.host(); // host of the current url
...
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 lURL 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 lURL 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
}]);
23. Routing Modes - Base Url
E possibile settare lURL base nellhead dellHTML
<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 竪 levento
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 竪 levento
next e previous sono rispettivamente
il nuovo route e quello precedente
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
Per segnalare ad angular dove renderizzare lHTML del template che vogliamo visualizzare abbiamo bisogno della direttiva ng-view e del modulo $route
Il servizio $location risolve il problema adattando lURL per i browser pi湛 vecchi. In sostanza usa la modalit Hashbang