¡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.
constant
, por lo tanto éstas se pueden inyectar en cualquier sitio.provider
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
. 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
.run
para inicializar la aplicación teniendo acceso a todo excepto los provider
Uncaught Error: [$injector:cdep] Circular dependency found: s1 <- s2 <- s1
Siendo 's1' y 's2' los servicios con referencias entre ellos.