Al generar servicios en la CLI angular, está agregando metadatos adicionales con una propiedad 'proporcionada en' con un valor predeterminado de 'raíz' para el decorador inyectable.
@Injectable({
providedIn: 'root',
})
¿Qué hace exactamente provideIn? Supongo que esto está haciendo que el servicio esté disponible como un servicio singleton de tipo 'global' para toda la aplicación, sin embargo, ¿no sería más limpio declarar tales servicios en la matriz de proveedores del AppModule?
ACTUALIZAR:
Para cualquier otra persona, el siguiente párrafo también proporcionó otra buena explicación, en particular si desea brindar su servicio solo a un módulo de funciones.
Ahora hay una nueva forma recomendada de registrar un proveedor, directamente dentro del
@Injectable()
decorador, utilizando el nuevoprovidedIn
atributo. Acepta'root'
como valor o cualquier módulo de su aplicación. Cuando lo use'root'
,injectable
se registrará como un singleton en la aplicación, y no necesita agregarlo a los proveedores del módulo raíz. Del mismo modo, si lo usaprovidedIn: UsersModule
,injectable
se registra como un proveedor de laUsersModule
sin agregarlo a laproviders
del módulo. "- https://blog.ninja-squad.com/2018/05/04/what-is-new-angular -6 /
ACTUALIZACIÓN 2:
Después de una investigación más profunda, he decidido que solo es útil tener providedIn: 'root'
Si desea provide
un servicio en cualquier módulo que no sea el módulo raíz, es mejor que use la providers
matriz en los decoradores del módulo de funciones, de lo contrario, estará plagado de dependencias circulares. Discusiones interesantes que se tendrán aquí - https://github.com/angular/angular-cli/issues/10170