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 nuevoprovidedInatributo. Acepta'root'como valor o cualquier módulo de su aplicación. Cuando lo use'root',injectablese 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,injectablese registra como un proveedor de laUsersModulesin agregarlo a laprovidersdel 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 provideun servicio en cualquier módulo que no sea el módulo raíz, es mejor que use la providersmatriz 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