¡Esta es una revisión vieja del documento!


3.4 Tipos de servicios

Hasta ahora hemos visto como usar varios tipos de servicios pero pasemos ahora a crear nuestros propios servicios.

Como ya dijimos al principio de esta unidad realmente hay 5 tipos de servicios que son:

Las diferencias entre ellos en muchos tutoriales no acaban de estar claras o no se especifica cuando usar uno u otro. En lo que queda de unidad trataremos de explicar las diferencias entre todas ellas.Aunque la diferencia principal entre ellos es donde se pueden inyectar mientras se inicializa la aplicación.

La siguiente tabla indica donde pueden inyectar o donde no inyectar cada uno de los servicios al iniciar la aplicación.

Se puede inyectar en un
Tipo Provider Bloque config Servicio 1) Bloque run
constant Si Si Si Si
provider Si 2) Si No No
value No No Si Si
service No No Si Si
factory No No Si Si
factory-provider No No Si Si

Una vez iniciada la aplicación, cualquiera de ellos , excepto el provider, ya se puede inyectar en cualquier otro artefacto como un controlador, directiva , etc.

El siguiente diagrama de actividad explica los pasos que realiza AngularJS al iniciar una aplicación.

PlantUML Graph

  • Actividad 1: Se puede ver como lo primero que se hace es inicializar las constant, por lo tanto éstas se pueden inyectar en cualquier sitio.
  • Actividad 2: Seguidamente se crean los provider
  • Actividad 3: Se llaman a los bloques config. Por lo tanto en un bloque config se puede inyectar tanto una constant como un provider. En un bloque config lo que se hace es configurar los provider.
  • Actividad 4: Ahora es cuando se llama a todos los servicios normales que son los value , service , factory y factory-provider. Llegados a este punto los provider no están accesibles ya que al estar ya configurados solo se tiene acceso a los factory-provider correspondientes a sus provider.
  • Actividad 5: Se llama al bloque run para inicializar la aplicación teniendo acceso a todo excepto los provider

Como es de esperar AngularJS no permite la referencias circulares entre servicios. En ese caso se producirá el error:

Uncaught Error: [$injector:cdep] Circular dependency found: s1 <- s2 <- s1

Siendo 's1' y 's2' los servicios con referencias entre ellos.

1) service, factory o factory-provider
2) Pero únicamente si está definido en otro módulo
unidades/03_servicios/04_tiposservicios.1406533488.txt.gz · Última modificación: 2014/07/28 09:44 por admin
Ir hasta arriba
CC Attribution-Share Alike 3.0 Unported
chimeric.de = chi`s home Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0