¡Esta es una revisión vieja del documento!
Ya hablamos en Resueltos antes de llamar al controlador sobre la importancia que tenían las promesas en el servicio de rutas. Ahora vamos a explicar esa importancia y volveremos a usar las promesas en paralelo con un objeto.
Lo que vamos a ver es una funcionalidad del método when
de $routeProvider.
Al definir una ruta , en el método when
, le pasamos un objeto con las propiedades templateUrl
y controller
. Este objeto puede tener más propiedades que no vamos a ver excepto la propiedad resolve
. Esta propiedad la podemos ver como el objeto que vimos en promesas en paralelo con un objeto.
El objeto resolve
contiene en cada una de sus propiedades funciones que retornan promesas 1) que se resolverán antes de llamar al controlador y que se pueden acceder desde el controlador si se inyectan en él.
¿Cual es la utilidad de ésto? Para mi son dos:
$scope
del controlador y no aun no está disponible porque el controlador ha hecho una llamada asíncrona 3), no se tienen los datos a tiempo para la directiva.$http
((o similar), podemos ver la página ya cargada pero los campos aun en blanco ya que aun estamos esperando los datos de la llamada a $http
. Esto queda un poco mal para el usuario ya que ve una página sin datos y un instante después aparecen por arte de mágia los datos.
La solución a estos 2 problemas sería hacer las llamadas asíncronas antes de mostrar la página y no mostrar la página hasta que no se hayan obtenido los datos. Pues bien , eso es justo lo que hace resolve
. No navegará hasta la ruta hasta que no estén todos los datos que necesitamos disponibles.
Veamos ahora un ejemplo de como se usa. Para ello vamos a volver a usar la función que creamos para las promesas de sumaAsincrona
, con el que simularemos unos datos que necesitamos.
$http