¡Esta es una revisión vieja del documento!
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.
Se puede ver como lo primero que se hace es inicializar las constant
, por lo tanto éstas se pueden inyectar en cualquier sitio.
Seguidamente se inicializan los provider
y 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
.
Llegados a este punto , el provider
ya deja de estar accesible ya que está configurado y ahora solo se tiene acceso a su factory-provider
.
Ahora es cuando se llama a todos los servicios normales que son los value
, service
, factory
y factory-provider
. una vez inizializados, por último se llama al bloque run
Uncaught Error: [$injector:cdep] Circular dependency found: s1 <- s2 <- s1
Siendo 's1' y 's2' los servicios con referencias entre ellos.