¡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:
- provider: Se puede pensar que son dos tipos el propio provider y el factory asociado (que llamaremos factory-provider)
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.
- 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 bloqueconfigse puede inyectar tanto unaconstantcomo unprovider. En un bloqueconfiglo que se hace es configurar losprovider. Una vez acabado de ejecutarse los bloquesconfig, - Actividad 4: Ahora es cuando se llama a todos los servicios normales que son los
value,service,factoryyfactory-provider. En este punto losproviderno están accesibles al estar ya estaban configurados solo se tiene acceso a losfactory-providercorrespondientes a susprovider. - Actividad 5: Se llama al bloque
runpara inicializar la aplicación teniendo acceso a todo excepto losprovider
Uncaught Error: [$injector:cdep] Circular dependency found: s1 <- s2 <- s1
Siendo 's1' y 's2' los servicios con referencias entre ellos.
