Criando um Web App do Zero usando AngularJS e Firebase
() translation by (you can also view the original English article)
Nesta série, usaremos AngularJS e Firebase para criar um simples aplicativo web a partir do zero. Será um simples aplicativo de blog onde o usuário pode se cadastrar ou logar e publicar um post.
Este tutorial presume que você tenha conhecimento básico de AngularJS, mas não deverá ser difícil acompanhar os tópicos que se seguem.
Introdução ao AngularJS
O AngularJS é um dos frameworks MVC mais procurados. É um framework estrutural para a criação de aplicativos web dinâmicos, ao estender as capacidades do HTML. Características como data binding e dependency injection o tornam fácil para desenvolver apps com menos código.
O HTML é ótimo para criar documentos estáticos, mas é fraco quando queremos usá-lo para criar visões dinâmicas em aplicativos web. O AngularJS permite que você amplie o vocabulário HTML para seu aplicativo. O ambiente resultante é extraordinariamente expressivo, legível e rápido para desenvolver.
Introdução ao Firebase
Imagine criar um aplicativo web sem se preocupar com o lado do back-end. O Firebase torna isto possível ao sincronizar dados em tempo real com nosso aplicativo sem ficar nos incomodando com o back-end. Tudo o que precisamos é somente fazer algumas chamadas de API.
O Firebase é uma poderosa API para armazenar e sincronizar dados em tempo real. Combina o poder do data binding de duas vias do AngularJS com os resultados do Firebase em uma sincronização em três vias que é fantástica.
Iniciando com AngularJS
O projeto angular-seed
é um código padrão para se iniciar na criação de aplicativos web usando AngularJS. Baixe ou clone o projeto angular-seed
a partir de seu repositório.
1 |
$ git clone https://github.com/angular/angular-seed.git |
Navegue até o diretório do projeto e instale as dependências necessárias.
1 |
$ cd angular-seed |
2 |
$ npm install ## Install the dependencies |
Inicie o servidor node:
1 |
$ npm start ## Start the server |
Aponte seu navegador para https://localhost:8000/app/index.html
e você deverá ver o app padrão rodando.
Navegue até o diretório app
, dentro do angular-seed
. É onde o código do aplicativo se encontra. Dentro da pasta app
você irá encontrar o arquivo app.js
que é o núcleo do app. Iremos declarar todos os módulos app-level e routes, dentro deste arquivo. Por padrão, o projeto angular-seed
tem duas visões: view1
e view2
. Exclua as pastas view1
e view2
da pasta app.
Vamos começar do zero. Abra o arquivo app.js
e remova o código existente. No arquivo app.js
iremos definir as rotas para nosso aplicativo. Por exemplo: como manipular uma requisição para /home
. Para definir rotas, precisaremos de um módulo do AngularJS chamado ngRoute. Para usar ngRoute
, primeiro nós precisamos injetá-lo, ou adicioná-lo ao nosso aplicativo. Iremos usar angular.module para adicionar o módulo ngRoute
ao nosso aplicativo, como mostrado abaixo:
1 |
angular.module('myApp', [ |
2 |
'ngRoute' |
3 |
]) |
O módulo ngRoute
tem um componente chamado $routeProvider que é útil para configurar rotas. Iremos injetar $routeProvider
no método config
de angular.module
e definir nossas rotas em sua função de callback, como mostrado abaixo:
1 |
'use strict'; |
2 |
|
3 |
angular.module('myApp', [ |
4 |
'ngRoute' |
5 |
]).
|
6 |
config(['$routeProvider', function($routeProvider) { |
7 |
// Routes will be here
|
8 |
}]);
|
A seguir, abra o arquivo index.html
e remova as referências aos scripts view1
e view2
. Remova tudo, do corpo de index.html
, exceto as referências a scripts e a div mostrada abaixo, com a diretiva ngView.
1 |
<div ng-view></div> |
ngView
é uma diretiva que ajuda a renderizar a visão anexada com uma rota particular no layout principal, index.html
. Então, a cada vez que a rota é modificada, o conteúdo da div acima exibida também é alterada.
Agora vamos criar uma nova visão para o usuário se conectar. Dentro do diretório app
, crie uma nova pasta chamada home
. Dentro de home
, crie dois arquivos: um chamado home.html
e outro, home.js
. Abra o arquivo home.html e inclua o código HTML a seguir:
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>
|
Como visto no código acima, nós usaremos Bootstrap para criar nossas visões do aplicativo.
Dentro do arquivo home.js
, iremos declarar as rotas para que o aplicativo acesse a visão home. $routeProvider
tem um método chamado when
, que usaremos para criar a rota para nossa visão home. Ao definir uma nova rota, iremos definir uma templateUrl
que poderia ser renderizada no arquivo index.html
. Juntamente com isso, vamos também definir um controller
para o recém criado $scope
, da visão home. Um controller é uma lógica que controla uma visão particular. Aqui está como ele deveria se parecer:
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 |
}]);
|
Agora abra o arquivo app.js
e inclua o módulo home myApp.home
no app. Declare também a rota padrão para seu aplicativo usando o método $routeProvider.otherwise
na visão 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 |
}]);
|
A seguir, para mostrar a homepage, precisamos incluir home.js
dentro do arquivo de modelo principal do app. Abra o arquivo index.html
e inclua o seguinte:
1 |
<script src="home/home.js"></script> |
Reinicie o servidor e aponte seu navegador para http://localhost:8000/app/index.html e você deve ver a tela de login.



Iniciando com o Firebase
Para iniciar, precisamos registrar uma conta grátis no Firebase. Ao concluir o registro com sucesso, iremos obter uma tela como a seguinte:



Anote a URL do app criado e clique no botão Manage App
. Usaremos esta URL do Firebase para interagir com o banco de dados Firebase.
Usaremos o Firebase para autenticar nosso aplicativo usando um e-mail e senha. Para fazer tudo funcionar, precisamos habilitá-lo no Firebase. A partir do painel de controle, clique na aba Login & Auth, no menu lateral à esquerda. Nesta tela, sob a aba Email & Password, marque Enable Email & Password Authentication, como exibido:



Adicione um novo usuário com um e-mail e senha, com o qual iremos efetuar a autenticação depois de implementar a funcionalidade de entrar.



Implementando a funcionalidade de Autenticação
Para iniciar o uso do Firebase, inclua os seguintes scripts em 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> |
A seguir, precisamos injetar o módulo firebase
no arquivo home.js
. Adicione o módulo firebase
no arquivo home.js
como mostrado acima:
1 |
angular.module('myApp.home', ['ngRoute','firebase']) |
Agora estamos prontos para interagir com o Firebase. Abra o arquivo home.js
e dentro de HomeCtrl
, crie uma nova função chamada SignIn
para autenticar o usuário. Usaremos $scope
para criar a nova função. $scope
é um objeto que faz referência ao modelo do aplicativo e também age como uma "cola" entre o controlador e a visão do aplicativo. Por isso injetaremos o objeto $scope
na função SignIn
, para que o modelo do objeto da visão seja acessível dentro da função 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 |
}
|
A seguir, dentro de HomeCtrl
, crie uma instância do Firebase usando a URL para o Firebase, como mostrada:
1 |
var firebaseObj = new Firebase("https://blistering-heat-2473.firebaseio.com"); |
O módulo $firebaseSimpleLogin
é usado para autenticação no Firebase usando um e-mail como ID e senha. Para usá-lo, precisamos injetar o módulo $firebaseSimpleLogin
em HomeCtrl
, como mostrado:
1 |
.controller('HomeCtrl', ['$scope','$firebaseSimpleLogin',function($scope,$firebaseSimpleLogin) { |
Usando firebaseObj
crie uma instância de $firebaseSimpleLogin
, como mostrado:
1 |
var loginObj = $firebaseSimpleLogin(firebaseObj); |
Agora, usando a API $login, iremos autenticar o ID do e-maill e a senha no Firebase. loginObj.$login
carrega o e-mail e a senha como parâmetros. Em uma autenticação bem sucedida, obtemos um callback de sucesso e em uma autenticação mal sucedida, obtemos um callback de erro.
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 |
}
|
Para que todo o código do controle acima funcione, precisamos anexar o controlador à visão. O AngularJS dispõe de uma diretiva chamada ngController para anexar um controlador à uma visão. Abra o arquivo home.html
e adicione a diretiva ngController
ao elemento body
, para anexá-la em HomeCtrl
.
Nós precisamos que os valores do e-mail e da senha estejam acessíveis dentro da função controladora SignIn
. AngularJS disponibiliza uma diretiva chamada ngModel para vincular seu valor a $scope
, para que seja acessível dentro da função SignIn
. Inclua a diretiva ngModel
aos elementos input
para e-mail e senha, como mostrado abaixo:
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>
|
Finalmente, adicione a diretiva ngClick ao botão de entrada, para chamar a função SignIn
:
1 |
<button type="button" ng-click="SignIn($event)" class="btn btn-lg btn-primary btn-block">SignIn</button> |
Salve todas as alterações e reinicie o servidor. Aponte seu navegador para http://localhost:8000/app/index.html#/home e tente entrar usando o e-mail jay3dec@gmail.com
como ID e jay
como senha. Se o usuário for autenticado com sucesso, você deverá ver a mensagem Authentication successful
no console do navegador.
Conclusão
Neste tutorial, nós revisamos como iniciar a criação de um aplicativo web em AngularJS. Implementamos a funcionalidade de autenticação de usuário e o autenticamos com sucesso em um banco de dados Firebase.
Na segunda parte deste tutorial, pularemos para o próximo nível ao implementar validações, funcionalidade de autenticação e outros recursos. O código para o tutorial acima está disponível no GitHub.
Deixe suas considerações nos comentários abaixo.
Seja o primeiro a saber sobre novas traduções–siga @tutsplus_pt no Twitter!