Advertisement
  1. Code
  2. Angular

Creando una aplicación web desde cero usando AngularJS y Firebase

Scroll to top
Read Time: 9 min
This post is part of a series called Creating a Web App From Scratch Using AngularJS and Firebase.
Creating a Web App From Scratch Using AngularJS and Firebase: Part 2

() translation by (you can also view the original English article)

En esta serie, usaremos AngularJS y Firebase para crear una aplicación web, desde cero. Será una aplicación web sencilla de blogging, en la que el usuario puede iniciar sesión o registrarse, y publicar posts en el blog.

Este tutorial, asume que tienes un conocimiento básico de AngularJS, aunque tampoco debería ser muy difícil comprender los conceptos sobre la marcha.

Introducción a AngularJS

AngularJS es una de los frameworks JavaScript MVC mejor valoradas. Es un framework estructural para crear aplicaciones web dinámicas, a base de extender las capacidades de HTML.

De la documentación de AngularJS:

HTML es estupendo para declarar documentos estáticos, pero flaquea cuando tratamos de usarlo para declarar vistas dinámicas en aplicaciones web. AngularJS te permite extender el vocabulario de HTML para tu aplicación. El entorno resultante es extraordinariamente expresivo, legible y rápido de desarrollar.

Introducción a Firebase

Imagínate crear una aplicación web sin tener que preocuparte del back-end. Firebase posibilita la sincronización de información en tiempo real con nuestra aplicación, sin molestarte con los detalles del back-end. Todo lo que necesitamos hacer son algunas llamadas API.

Firebase en un API poderosa para almacenar y sincronizar información en tiempo real. La combinación del potente enlace de datos de dos direcciones de AngularJS con Firebase, da como resultado una impresionante sincronización en tres direcciones.

Comenzando con AngularJS

El proyecto angular-seed es una plantilla para comenzar la creación de aplicaciones web que usan AngularJS. Descarga o clona el proyecto angular-seed desde el repositorio.

1
$ git clone https://github.com/angular/angular-seed.git

Ve hasta el directorio del proyecto e instala las dependencias obligatorias.

1
$ cd angular-seed

2
$ npm install         ## Install the dependencies

Arranca el servidor node:

1
$ npm start           ## Start the server

Si diriges tu navegador a la dirección: https://localhost:8000/app/index.html deberías ver la aplicación por defecto funcionando.

Ahora ve hasta el directorio app dentro de la carpeta angular-seed. Aquí es donde reside el código de la aplicación. Dentro de la carpeta app encontrarás el fichero app.js que es el corazón de nuestra aplicación. Dentro de este fichero declararemos los módulos y rutas de nuestra aplicación. El proyecto angular-seed tiene dos vistas por defecto, view1 y view2. Borra las carpetas view1 y view2 de la carpeta de la aplicación.

Comencemos desde el cero. Abre app.js y borra todo el código que hay. En app.js definiremos las rutas de nuestra aplicación para, por ejemplo, definir como manejar peticiones del tipo: /home. Pero para definir rutas, necesitaremos un módulo de AngularJs llamado ngRoute. Y para poder usar ngRoute, primero tenemos que "inyectarlo" o añadirlo a nuestra aplicación. Para ello usaremos angular.module que nos permite añadir el módulo ngRoute a nuestra aplicación, tal y como se muestra abajo:

1
angular.module('myApp', [
2
  'ngRoute'
3
])

El módulo ngRoute tiene un componente llamado $routeProvider que es muy útil para configurar rutas. Inyectaremos $routeProvider dentro del método config de angular.module y definiremos nuestras rutas en su función de callback, tal y como puedes ver a continuación:

1
'use strict';
2
3
angular.module('myApp', [
4
  'ngRoute'
5
]).
6
config(['$routeProvider', function($routeProvider) {
7
 // Routes will be here

8
}]);

A continuación, abre index.html y borra las referencias de script a view1 y view2. Elimina todo dentro del tag body de index.html a excepción de las referencias de script y el div que mostramos a continuación con la directiva ngView .

1
<div ng-view></div>

ngView es una directiva, que nos ayuda a renderizar la vista asociada a una ruta en particular, dentro del diseño principal de index.html. De manera, que cada vez que la ruta cambia, el contenido del div que mostramos arriba, cambia.

Ahora creemos una nueva vista para que el usuario pueda iniciar sesión. Dentro del directorio app crea una nueva carpeta llamada home. Y dentro de home, crea dos archivos llamados respectivamente home.html y home.js. Abre home.html e incluye el siguiente código 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>

Tal y como vemos en el código anterior, usaremos Bootstrap para crear las vistas de nuestra aplicación.

Dentro de home.js, declararemos las rutas para acceder a la vista home. $routeProvider tiene un método llamado when, que es el que usaremos para crear una ruta para nuestra vista. Cuando definimos una nueva ruta, tenemos que configurar un templateUrl que será renderizado en index.html. Al mismo tiempo también hemos de configurar un controller(controlador) para el recién creado $scope de la vista home. Un controlador es la lógica que controla una vista en particular. Así es como debería quedar:

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
}]);

Ahora abre app.js e incluye el módulo home myApp.home en la aplicación. También debes declarar la ruta por defecto de nuestra aplicación usando para ello, el método $routeProvider.otherwise de la 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
}]);

A continuación, para poder mostrar la página de inicio, necesitamos incluir home.js dentro del principal archivo de plantilla HTML de la aplicación. Para ello, abre index.html e incluye lo siguiente:

1
<script src="home/home.js"></script>

Reinicia el servidor y apunta tu navegador a http://localhost:8000/app/index.html y deberías ver la pantalla de inicio de sesión:

AngularJS  FirebaseAngularJS  FirebaseAngularJS  Firebase

Comenzando con Firebase

Para poder comenzar, necesitamos registrarnos y obtener una cuenta gratuita en Firebase. Una vez terminado el registro, veremos una pantalla como la siguiente:

Firebase DashboardFirebase DashboardFirebase Dashboard

Anota la URL de la aplicación creada y haz click en el botón Manage App. Usaremos esta URL de Firebase para interactuar con la base de datos.

Para autentificar nuestra aplicación con Firebase, usaremos una dirección de correo y una clave. Para que esto funcione, necesitamos habilitarlo desde Firebase. En el dashboard, haz click en la pestaña Login & Auth en el menú de la izquierda. En esa pantalla, bajo la pestaña Email & Password, marca Enable Email & Password Authentication tal y como se muestra en la siguiente imagen:

Enable Email  Password AuthenticationEnable Email  Password AuthenticationEnable Email  Password Authentication

Añade un nuevo usuario con un Email y Password con los que nos autentificaremos una vez que implementemos la funcionalidad de inicio de sesión.

Add a new user with an Email and PasswordAdd a new user with an Email and PasswordAdd a new user with an Email and Password

Implementando la funcionalidad de Inicio de Sesión

Para poder comenzar a usar Firebase, incluye las siguientes scripts en 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>

Después, tenemos que inyectar el módulo firebase en home.js. Añade el módulo firebase en home.js como se muestra a continuación:

1
angular.module('myApp.home', ['ngRoute','firebase'])

Ya estamos listos para interactuar con Firebase. Abre home.js y dentro de HomeCtrl, crea una nueva función llamada SignIn para autentificar al usuario. Usaremos $scope para crear la nueva función. $scope es un objeto que apunta al modelo de la aplicación, y que también actúa como pegamento entre el controlador de la aplicación y la vista. Por lo tanto inyectaremos el objeto $scope dentro de SignIn de manera que el objecto modelo de la vista sea accesible dentro de la función 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 continuación, dentro de HomeCtrl, crea una instancia de Firebase usando la URL que anotamos anteriormente tal y como se muestra:

1
var firebaseObj = new Firebase("https://blistering-heat-2473.firebaseio.com"); 

El módulo $firebaseSimpleLogin, se utiliza para autentificar contra Firebase usando una dirección de correo y una clave. Para usarlo, necesitaremos inyectar el módulo $firebaseSimpleLogin dentro de HomeCtrl de la siguiente forma:

1
.controller('HomeCtrl', ['$scope','$firebaseSimpleLogin',function($scope,$firebaseSimpleLogin) {

Usando firebaseObj crea una instancia de $firebaseSimpleLogin:

1
var loginObj = $firebaseSimpleLogin(firebaseObj);

Ahora, usando el API $login Autentificaremos la dirección de correos y la clave contra Firebase. loginObj.$login recibe como parámetros la dirección de correos y la clave. En el caso de una autentificación con éxito, obtenemos un "success callback" y en caso de que la autentificación sea infructuosa, obtenemos un "error callback".

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 el código del controlador funcione, necesitamos enlazar el controlador y la vista. AngularJS nos provee con una directiva llamada ngController que permite enlazar un controlador a una vista. Abre home.html y añade la directiva ngController al elemento body para enlazarlo con HomeCtrl.

Necesitamos que los valores de la dirección de email y la clave sean accesibles dentro de la función SignIn del controlador. AngularJS nos suministra una directiva llamada ngModel para enlazar su valor a $scope de manera que sea accesible dentro de la función SignIn. Incluye la directiva ngModel en los elementos input de email y password tal como se muestra:

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, añade la directiva ngClick al botón sign-in para llamar a la función SignIn:

1
<button type="button" ng-click="SignIn($event)" class="btn btn-lg btn-primary btn-block">SignIn</button>

Guarda todos los cambios y reinicia el servidor. Dirige tu navegador a http://localhost:8000/app/index.html#/home e intenta iniciar sesión usando la dirección de correos jay3dec@gmail.com y la clave jay. En caso de que el usario se autentifique con éxito, deberías ver el mensaje Authentication successful en la consola del navegador.

Conclusión

En este tutorial, hemos repasado como iniciar la creación de una aplicación web con AngularJS. Hemos implementado la funcionalidad de inicio de sesión y hemos autentificado con éxito al usuario con la base de datos Firebase.

En la segunda parte de este tutorial, llevaremos todo ello al siguiente nivel implementando validaciones, funcionalidades de registro, y algunas otras características. El código de este tutorial está disponible en GitHub.

Nos gustaría oír vuestras impresiones en los comentarios.

¡Sé el primero en conocer las nuevas traducciones–sigue @tutsplus_es en Twitter!

Advertisement
Did you find this post useful?
Want a weekly email summary?
Subscribe below and we’ll send you a weekly email summary of all new Code tutorials. Never miss out on learning about the next big thing.
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.