Creiamo una Web App da zero usando AngulaJS e Firebase
() translation by (you can also view the original English article)
In questa serie useremo AngularJS e Firebase per creare una semplice applicazione web da zero. Sarà una semplice applicazione di blogging dove l'utente potrà registrarsi o loggarsi e pubblicare un post nel blog.
Questo tutorial presume che abbiate un conoscenza di base di AngularJS, ma non dovrebbe essere difficile cogliere i vari argomenti lungo in nostro percorso.
Introduzione a AngularJS
AngularJS è uno dei più ambiti framework MVC in Javascript. È un un framework strutturale per creare applicazioni web dinamiche estendendo le capacità dell'HTML Caratteristiche come il data binding o le dependency injection rendono più facile sviluppare applicazioni con meno codice.
Dalla documentazione di AngularJS:
HTML è magnifico per creare documenti statici, ma vacilla quando proviamo a usarlo per gestire schermate dinamiche nelle applicazioni web. AngularJS ti permette di estendere il vocabolario HTML delle tue applicazioni. L'ambiente risultante è straordinariamente espressivo, leggibile e di rapido sviluppo.
Introduzione a Firebase
Immagina di creare una applicazione web senza doverti preoccupare del lato back-end. Firebase rende questo possibile sincronizzando i dati in tempo reale con la tua applicazione senza preoccuparsi del back-end. Basta fare solo qualche richiamo all'API.
Firebase è una potente API per memorizzare e sincronizzare dati in tempo reale. Combinando la potenza del data binding (aggiornamento UI -> Prorpietà e viceversa) a doppia via di AngualarJS con Firebase il risultato è una sincronizzazione a tre vie decisamente imponente.
Iniziamo con AngularJS
Il progetto angualar-seed
è un boilerplate per iniziare la creazione di web app usando AngularJS. Scarica o clona il progetto anguilar-seed
dal repository.
1 |
$ git clone https://github.com/angular/angular-seed.git |
Spostati nella cartella del progetto e installa le dipendenze richieste.
1 |
$ cd angular-seed |
2 |
$ npm install ## Install the dependencies |
Avvia il server:
1 |
$ npm start ## Start the server |
Punta con il tuo browser a https://localhost:8000/app/index.html
e dovresti vedere l'applicazione di default avviata.
Entra nella cartella app
dentro angular-seed
. Lì risiede il codice dell'applicazione. All'interno della cartella app
troverai app.js
che è il nucleo dell'app. Dichiareremo tutti i moduli e percorsi al livello di app all'interno di questo file. Di default, il progetto angular-seed
ha due viste , view1
e view2
. Cancella le cartelle view1
e view2
dalla cartella dell'applicazione.
Partiamo da zero. Apriamo app.js
e rimuoviamo il codice esistente. In app.js
andremo a definire i percorsi della nostra applicazione, per esempio come gestire richieste come /home
. Per definire i percorsi avremo bisogno di un modulo di AngularJS chiamato ngRoute. Per usare ngRoute
dobbiamo prima includerlo o aggiungerlo alla nostra applicazione. Useremo angular.module per aggiungere il modulo ngRoute
alla nostra app come mostrato sotto:
1 |
angular.module('myApp', [ |
2 |
'ngRoute' |
3 |
]) |
Il modulo ngRoute
ha un componente chiamato $routeProvider che è utile per configurare i percorsi. Inseriremo $routeProvider
nel metodo config
di angular.module
e definiremo i nostri percorsi nella sua funzione di richiamo come mostrato sotto:
1 |
'use strict'; |
2 |
|
3 |
angular.module('myApp', [ |
4 |
'ngRoute' |
5 |
]).
|
6 |
config(['$routeProvider', function($routeProvider) { |
7 |
// Routes will be here
|
8 |
}]);
|
In seguito, apriamo index.html
e rimuoviamo i riferimenti a view1
e view2
. Rimuoviamo ogni cosa dal body di index.html
eccetto i riferimenti script e i div mostrati sotto con la direttiva ngView.
1 |
<div ng-view></div> |
ngView
è una direttiva che aiuta a renderizzare la vista associata a un particolare percorso all'interno del layout generale, index.html
. Ogni qual volta il percorso cambia, il contenuto mostrato sotto il div cambia.
Adesso creiamo una nuova vista per il sign in dell'utente. All'interno della directory app
creiamo una cartella chiamata home
. All'interno di home
creiamo due file chiamati home.html
e home.js
. Apriamo home.html
e includiamo il seguente codice HTML:
1 |
<!DOCTYPE html>
|
2 |
<html lang="en" ng-app="myApp"> |
3 |
|
4 |
<head>
|
5 |
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> |
6 |
<link rel="icon" href="http://getbootstrap.com/favicon.ico"> |
7 |
|
8 |
<title>AngularJS & Firebase Web App</title> |
9 |
|
10 |
<link href="http://getbootstrap.com/dist/css/bootstrap.min.css" rel="stylesheet"> |
11 |
<link href="http://getbootstrap.com/examples/signin/signin.css" rel="stylesheet"> |
12 |
|
13 |
<link href="justified-nav.css" rel="stylesheet"> |
14 |
|
15 |
</head>
|
16 |
|
17 |
<body>
|
18 |
|
19 |
<div class="container"> |
20 |
<div class="jumbotron" style="padding-bottom:0px;"> |
21 |
<h2>AngularJS & Firebase App!</h2> |
22 |
</div>
|
23 |
<form class="form-signin" role="form"> |
24 |
<input type="email" class="form-control" placeholder="Email address" required="" autofocus=""> |
25 |
<input type="password" class="form-control" placeholder="Password" required=""> |
26 |
<label class="checkbox"> |
27 |
<a href="#"> Sign Up</> |
28 |
</label>
|
29 |
<button class="btn btn-lg btn-primary btn-block" type="submit">Sign in</button> |
30 |
</form>
|
31 |
|
32 |
</div>
|
33 |
|
34 |
|
35 |
|
36 |
</body></html>
|
Come si può vedere nel codice sopra, useremo Bootstrap per creare la vista della nostra applicazione.
All'interno di home.js
dichiareremo i percorsi per l'accesso della applicazione alla vista home. $routeProvider
ha un metodo chiamato when
che useremo per creare un percorso per la nostra vista home. Quando dichiariamo un nuovo percorso, configureremo un templateUrl
che dovrebbe renderizzare il nostro index.html
. Allo stesso modo, configureremo un controller
per creare un nuono $scope
della vista home. Un controller è un logica che controlla una particolare vista. Ecco come dovrebbe apparire:
1 |
'use strict'; |
2 |
|
3 |
angular.module('myApp.home', ['ngRoute']) |
4 |
|
5 |
// Declared route
|
6 |
.config(['$routeProvider', function($routeProvider) { |
7 |
$routeProvider.when('/home', { |
8 |
templateUrl: 'home/home.html', |
9 |
controller: 'HomeCtrl' |
10 |
});
|
11 |
}])
|
12 |
|
13 |
// Home controller
|
14 |
.controller('HomeCtrl', [function() { |
15 |
|
16 |
}]);
|
Ora apriamo app.js
e includiamo il modulo home myApp.home
nell'applicazione. Inoltre dichiariamo il percorso di default della nostra applicazione usando il metodo $routeProvider.otherwise
per la nostra vista home.
1 |
'use strict'; |
2 |
|
3 |
angular.module('myApp', [ |
4 |
'ngRoute', |
5 |
'myApp.home' // Newly added home module |
6 |
]).
|
7 |
config(['$routeProvider', function($routeProvider) { |
8 |
// Set defualt view of our app to home
|
9 |
|
10 |
$routeProvider.otherwise({ |
11 |
redirectTo: '/home' |
12 |
});
|
13 |
}]);
|
Dopo di che, per mostrare la homepage, abbiamo bisogno di includere home.js
all'interno del file template HTML principale dell'applicazione. Apriamo index.html
e includiamo il seguente codice:
1 |
<script src="home/home.js"></script> |
Riavviamo il server e puntiamo il browser all'indirizzo http://loaclhost:8000/app/index.html e dovremmo vedere la videata di log in.



Iniziamo con Firebase
Prima di tutto per iniziare abbiamo bisogno di registrare un account gratuito su Firebase. Dopo la registrazione ci ritroveremo una schermata come questa:



Prendete nota dell'URL dell'app creata e cliccate sul pulsante Manage App
. Useremo questo URL di Firebase per interagire con il database di Firebase.
Useremo Firebase per l'autenticazione della nostra applicazione usando un email e una password. Per farlo funzionare è necessario abilitarlo da Firebase. Dalla Dashboard, cliccate sula scheda Login & Auth nel menù di sinistra. Nella schermata, sotto la scheda Email & Password, spuntate Enable Email & Password Authentication come mostrato:



Aggiungete un nuovo utente con una Email e una Password mediante la quale ci autenticheremo dopo aver implementato la funzione di Sign-in.



Implementazione della funzionalità di Sign-In.
Per utilizzare Firebase includiamo il seguente script in app/index.html
:
1 |
<script src="https://cdn.firebase.com/js/client/1.0.18/firebase.js"></script> |
2 |
<script src="https://cdn.firebase.com/libs/angularfire/0.8.0/angularfire.min.js"></script> |
3 |
<script src="https://cdn.firebase.com/js/simple-login/1.6.2/firebase-simple-login.js"></script> |
Dopo bisogna includere il modulo firebase
in home.js
. Aggiungiamo il modulo firebase
in home.js
come mostrato sotto:
1 |
angular.module('myApp.home', ['ngRoute','firebase']) |
Adesso siamo pronti per interagire con Firebase. Apriamo home.js
e dentro HomeCTRL
, creiamo una nuova funzione chiamata SingIn
per l'autenticazione dell'utente. Useremo $scope
per create la nuova funzione. $scope
è un oggetto che fa riferimento al modello dell'applicazione, e funge anche da collante tra il controller e la vista dell'applicazione. Da qui noi inseriremo l'oggetto $scope
nella funzione SignIn
così che il modello oggetto dalla vista sia accessibile all'interno della fuznione SignIn
.
1 |
$scope.SignIn = function($scope) { |
2 |
var username = $scope.user.email; |
3 |
var password = $scope.user.password; |
4 |
|
5 |
// Auth Logic will be here
|
6 |
}
|
Dopo di che, all'interno di HomeCtrl
creiamo un istanza di Firebase usando l'URL di Firebase come mostrato:
1 |
var firebaseObj = new Firebase("https://blistering-heat-2473.firebaseio.com"); |
Il modulo $firebaseSimpleLogin
viene utilizzato per l'autenticazione a Firebase utilizzando un ID di posta elettronica e una password. Per usarlo, abbiamo bisogno di iserire il modulo $firebaseSimpleLogin
in HomeCtrl
come indicato:
1 |
.controller('HomeCtrl', ['$scope','$firebaseSimpleLogin',function($scope,$firebaseSimpleLogin) { |
Usando firebaseObj
create un'istanza $firebaseSimpleLogin
come mostrato:
1 |
var loginObj = $firebaseSimpleLogin(firebaseObj); |
Ora usando l'API $login autenticheremo l'email di ID e la password tramite Firebase loginObj.$login
prende email e password come parametri. A seguito di un'autenticazione corretta, avremmo un callback positivo oppure a seguito di una non corretta autenticazione un callback di errore.
1 |
$scope.SignIn = function(event) { |
2 |
event.preventDefault(); // To prevent form refresh |
3 |
var username = $scope.user.email; |
4 |
var password = $scope.user.password; |
5 |
|
6 |
loginObj.$login('password', { |
7 |
email: username, |
8 |
password: password |
9 |
})
|
10 |
.then(function(user) { |
11 |
// Success callback
|
12 |
console.log('Authentication successful'); |
13 |
}, function(error) { |
14 |
// Failure callback
|
15 |
console.log('Authentication failure'); |
16 |
});
|
17 |
}
|
Adesso, affinché il codice di controllo funzioni, abbiamo bisogno di collegare il controller alla vista. AngularJS fornisce una direttiva chiamata ngController per collegare un controller ad una vista. Apriamo home.html
e aggiungiamo la direttiva ngController
all'elemento body
per collegarlo a HomeCtrl
.
Abbiamo bisogno di una email e di una password per accedere all'interno della funzione di Controllo SingIn
. AngularJS fornisce una direttiva chiamata ngModel per legare il suo valore a $scope
in modo che sia accessibile all'interno della funzione SignIn
. Includiamo la direttiva ngModel
all'elemento input
dell'email e della password come mostrato:
1 |
<body ng-controller="HomeCtrl"> |
2 |
|
3 |
<div class="container"> |
4 |
<div class="jumbotron" style="padding-bottom:0px;"> |
5 |
<h2>AngularJS & Firebase App!</h2> |
6 |
</div>
|
7 |
<form class="form-signin" role="form"> |
8 |
<input ng-model="user.email" type="email" class="form-control" placeholder="Email address" required="" autofocus=""> |
9 |
<input ng-model="user.password" type="password" class="form-control" placeholder="Password" required=""> |
10 |
<label class="checkbox"> |
11 |
<a href="#"> Sign Up</> |
12 |
</label>
|
13 |
<button type="button" class="btn btn-lg btn-primary btn-block">SignIn</button> |
14 |
</form>
|
15 |
|
16 |
</div>
|
17 |
|
18 |
|
19 |
|
20 |
</body>
|
In fine aggiungiamo la direttiva ngClick al pulsante Sign-in per richiamare la funzione SignIn
:
1 |
<button type="button" ng-click="SignIn($event)" class="btn btn-lg btn-primary btn-block">SignIn</button> |
Salviamo tutti i cambiamenti e riavviamo il server. Puntiamo il browser all'indirizzo http://localhost:8000/app/index.html#/home e proviamo a loggarci usando ID email jay3dec@gmail.com
e password jay
. Su una corretta autenticazione dovremmo visualizzare il messaggio Authentication successful
nella console del browser.
Conclusioni
In questo tutorial abbiamo visto come iniziare a creare un'applicazione web basata su AngularJS Abbiamo implementato la funzionalità di accesso e di autenticazione corretta dell'utente tramite il database di Firebase.
Nella seconda parte di questo tutorial, porteremo il tutto al livello successivo implementando la validazione e la funzionalità di registrazione e qualche altra funzionalità. Il codice del tutorial di sopra è disponibile su GitHub.
Fateci conoscere le vostre opinioni nei commenti qui sotto.