====== 7.1 Justificación ======
Las rutas son un concepto ya establecido en las aplicaciones actuales pero quizás no nos hayamos dado cuenta aún de ello. Para empezar a entenderlas vamos primero a ver unas capturas de pantalla de gmail.
Página de "Recibidos": URL=https://mail.google.com/mail/u/0/**#inbox**
{{:unidades:07_rutas:gmail-inbox.png?nolink|}}
\\
Página de "Importantes": URL=https://mail.google.com/mail/u/0/**#imp**
{{:unidades:07_rutas:gmail-imp.png?nolink|}}
\\
Página de "Enviados": URL=https://mail.google.com/mail/u/0/**#sent**
{{:unidades:07_rutas:gmail-sent.png?nolink|}}
\\
Página de "Todos": URL=https://mail.google.com/mail/u/0/**#imp**
{{:unidades:07_rutas:gmail-all.png?nolink|}}
\\
Ahora analicemos cada una de las URL y las páginas. Para ello volvamos a poner las páginas y sus URLs:
^ Página ^ URL ^
|Recibidos |https://mail.google.com/mail/u/0/**#inbox** |
|Importantes |https://mail.google.com/mail/u/0/**#imp** |
|Enviados |https://mail.google.com/mail/u/0/**#sent** |
Sabemos que la parte que hay después de la "#" corresponde a una parte dentro de la página, es decir, a un fragmento. Por lo tanto las 4 URL corresponden todas a la misma página, que en este caso es https://mail.google.com/mail/u/0/. Es decir, que en este ejemplo, la aplicación de gmail está en una única página llamada https://mail.google.com/mail/u/0/, pero cambiando los fragmentos se muestra una cosa u otra.
===== Rutas =====
Ahora vamos a explicar qué son las rutas pero para ello vamos a cambiar un poco lo que son nuestros conceptos sobre qué es una página , una URL ,etc. Los vamos a redefinir para adecuarlo a cómo funciona una página como gmail y por supuesto cómo se trabaja en AngularJS.
Realmente la aplicación de gmail tiene muchas //páginas// aunque en la barra del navegador siempre estemos en la misma página. Y los fragmentos de las URL realmente nos indican esas nuevas //páginas// que queremos mostrar. Entonces ¿qué es una ruta?, una ruta es simplemente el nombre de un fragmento pero que ahora ya no va a hacer referencia a una parte dentro de la página sino que ahora cambiar la ruta (el fragmento) indica cargar una nueva página dentro de la página //real// que estamos viendo.
Ahora podemos volver a mostrar la tabla anterior de la siguiente forma:
^ Página ^ Ruta ^
|Recibidos |**inbox** |
|Importantes |**imp** |
|Enviados |**sent** |
Ahora tenemos una página real que es https://mail.google.com/mail/u/0/ y dentro de ella cargamos nuevas páginas dependiendo de la ruta (fragmento) que pongamos. Esta forma de trabajar se llama:
* Single-Page Application (SPA)
* Single-Page Interface (SPI)
¿Qué ventajas tiene esta forma de trabajar?
* La principal ventaja es la rapidez. Las aplicaciones actuales tienen mucho CSS, JavaScript , etc. Al tener una única página real, se carga todo ello al principio una única vez y cuando cambiamos de //página// todo lo anterior ya está cargado , y sólo cambiamos el HTML de la nueva //página//.
* Otra ventaja es que podemos mantener nuestro estado en variables JavaScript ya que nunca salimos de la página , lo que nos simplifica mucho el desarrollo. ¿Recordáis cuando navegar a otra página podía implicar pasar muchas cosas en la URL para pasar el estado de la aplicación de una página a otra?
Pues después de todo ésto, en el siguiente tema vamos a ver cómo funciona el servicio de rutas de AngularJS que nos permitirá tener una única página y en función de las rutas cargar unas páginas u otras dentro de la página principal.