Qué es una single page application con AngularJS

En este post voy a explicar cómo hacer una single page application (SPA) o aplicación de página única. Consiste en una aplicación web o sitio web que cabe en una sola página. En otras palabras, la página web sólo se «carga» una vez con el propósito de dar una experiencia más fluida. En una SPA todos los códigos de HTML, JavaScript, y CSS se carga de una vez.

Podemos conseguir una single page application  mediante AngularJS y su sistema de rutas o routes. Es una herramienta bastante flexible para resolver el problema de transmisión de grandes cantidades de información en una single page application. El routing de Angular indica donde está nuestro contenido y cuando un usuario lo pida, debería de encontrarlo y cargarlo.

Para poder usar el sistema de routes de Angular precisaremos el servicio $route y el módulo ngRoute. Para instalar el ngRoute basta con que llaméis a este script justo después de llamar la librería de angular.

En el ejemplo que vamos a realizar va haber 3 páginas: Incio, contacto y un sobre nosotros. Con el routes de Angular vamos a «inyectar» el HTML de cada una de esas páginas a una vista común o padre. Te recomiendo que tengas bastante claro el concepto de vista ya que las rutas y las vistas en AngularJS van de la mano. Puedes mirar la estructura de Modelo-Vista-Controlador aquí.

Definir rutas

Para definir rutas usaremos el servicio $route. Este servicio lo que hace es mapear entre las URLs y los archivos de las vistas. Estos mapeos son valores devueltos de la función $location.path(). Cuando el valor de este cambie, y coincida con alguna de las rutas que definamos, se cargará la correspondiente vista. Por ejemplo:

Por ahora no te preocupes si no entiendes el código, es sólo una mera aproximación. Lo que pasamos al método $routerProvider.when() son 2 argumentos: uno de ellos la ruta que queremos que el sistema de rutas busque y la segunda es un objeto literal que contiene la localización de la vista y el controlador que va a usar.

Ahora vamos a ponernos con el ejemplo. Para la página padre emplearemos un index.html. Y las plantillas de las vistas serán inicio.html, sobre-nosotros.html y contacto.html que serán cargados dentro de index.html por el sistema de rutas de AngularJS. También usaremos un error.html para cuando la ruta no coincida con ninguna que le pidamos. Todo esas páginas estarán dentro de una carpeta llamada paginas que estará en el mismo lugar donde estés realizando el ejemplo.

Qué es una single page application - Estructura de trabajo 1

Estructura de archivos (raíz)
Qué es una single page application - Estructura de trabajo 2

Estructura de archivos (carpeta paginas)

Creación de la vistas

Vista padre (index.html)

Esta será la página común para el resto de vistas. En ella llamamos a la librería de Bootstrap (CDN)  para dar un ligero diseño y las librerías de AngularJS. Además, vamos a definir las rutas que harán que nuestra single page application funcione.

En en esta página cabe destacar una serie de cosas. La primera de ellas la invocación de ngRoute a nuestro módulo

El lugar donde se mostrarán las vistas hija mediante la directiva ngView

Las URLs del menú van precedidas con el carácter «#» ya que el sistema de rutas emplea en la comparación el texto justo después del «#»

Aunque para que la comparación de las URLs sea un éxito es importante eliminar el bang prefix (#!) que viene con HTML5.

El uso de $routeProvider en la configuración de nuestro módulo para definir las distintas rutas.

Y la definición de los distintos controladores que se usarán en una página u otra.

Lo único que haremos es añadir un mensaje diferente en cada vista. Recordemos que en las rutas si la URL coincide, además de cargar la vista cargará su respectivo controlador.

sobre-nosotros.html

contacto.html

error.html

En esta vista cabe destacar que rutaIntroducida es el valor que obtenemos del método path() del servicio location() que definimos en el controlador de index.html.

Y sólo se invocará si la URL que introduzcamos no coincide con ninguna de las que hemos definido (otherwise).

Resultado Final

Una vez llegados hasta aquí vuestra single page application debería de funcionar correctamente.

Que es una single page application - Resultado final

De todas formas dejo el código en mi GitHub para que podáis descargarlo.

Espero que os haya gustado este tutorial sobre single page application, a seguir picando 🙂