He estado viendo Introducción a Angular 2 en PluralSight y vi que algunos servicios creados se inyectan en el componente de la aplicación y el componente del módulo.
Aquí hay un ejemplo:
Al crear un RouterGuard en Angular 2, el Servicio creado para RouterGuard se inyecta en el nivel del Módulo, pero algunos servicios personalizados se inyectan solo en el nivel del Componente de la aplicación. Mi pregunta es, ¿cuándo debo inyectar un servicio a nivel de módulo y cuándo inyectar solo a nivel de componente de aplicación?
¡Gracias!
De hecho, puede proporcionar servicios a nivel de Módulo ya nivel de Componente. Puede proporcionar un servicio a nivel de Módulo, al incluirlo en la matriz de providers de NgModule de esta manera:
@NgModule({ declarations: [ ... ], imports: [ ... ], providers: [MyService], bootstrap: [AppComponent] })Cuando hace esto, está proporcionando la misma instancia en todo el módulo y en todos los elementos secundarios.
Pero, en ocasiones, es posible que desee proporcionar instancias separadas de servicios a los componentes. En ese caso, puede proporcionar un servicio en el nivel de Componente incluyéndolo en la matriz de providers en el decorador de componentes de esta manera:
@Component({ templateUrl: './app.component.html', providers: [MyService] })Esto proporciona una nueva instancia del servicio solo para este componente.
Un ejemplo de cuándo desea proporcionar un servicio a nivel de módulo es cuando utilizará un servicio para almacenar datos compartidos por varios componentes. Esto podría estar usando variables u observables que están almacenados en el servicio, pero que son usados por varios componentes. Otro momento en el que desearía proporcionar un servicio a nivel de Módulo es si su servicio no tiene estado (solo devuelve observables de llamadas Http). En estos escenarios, tener una instancia compartida tiene sentido.
Otras veces, es posible que desee proporcionar un servicio que también contenga datos, pero desea que cada componente tenga su propia instancia. En este escenario, tiene sentido proporcionar el servicio a nivel de Componente.
Espero que ayude.