inyección de dependencia angular 6


En la última versión de Angular 6, un servicio se registra en un módulo utilizando la propiedad providedIn en los metadatos del servicio:

@Injectable({
  providedIn: 'root',
})
export class HeroService {}

Sin embargo, la documentación también se refiere al registro del servicio en el array module providers en los metadatos del módulo, tal como hicimos en Angular 5:

@NgModule({
  providers: [HeroService],
})
export class AppModule {}

Entonces, ¿qué método debe usarse para hacer que el inyector sea consciente del servicio que debe inyectar y si el método de matriz del proveedor del módulo será obsoleto?

Author: Hamed Baatour, 2018-05-07

2 answers

Básicamente puedes usar cualquiera, Pero según la nueva CLI provideIn se agregará automáticamente al crear service

Proporcionado en

Ahora hay una nueva, recomendada, forma de registrar un proveedor, directamente dentro del decorador @Injectable(), utilizando el nuevo atributo. Acepta 'root' como un valor o cualquier módulo de su aplicación. Cuando use 'root', su inyectable se registrará como un singleton en la aplicación, y no es necesario agregarlo a la proveedor del módulo raíz. Del mismo modo, si utiliza providedIn: UsersModule, el inyectable está registrado como un proveedor de la UsersModule sin añadirlo a los proveedores del módulo.

Esta nueva forma se ha introducido para tener una mejor sacudida de árboles en el aplicación. Actualmente un servicio añadido a los proveedores de un módulo terminará en el paquete final, incluso si no se utiliza en el solicitud, que es un poco triste.

Para obtener más información, consulte aquí

 42
Author: Pardeep Jain,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-05-07 10:24:39

Como siempre, cuando hay múltiples soluciones disponibles, depende de lo que se quiera lograr. Pero la documentación le da alguna directiva para elegir.

A veces no es deseable que un servicio siempre se proporcione en el inyector raíz de aplicación. Tal vez los usuarios deberían explícitamente opt-in para utilizar el servicio, o el servicio debe ser proporcionado en un contexto perezosamente cargado. En este caso, el proveedor debe estar asociado con un @NgModule class específico, y será utilizado por cualquiera el inyector incluye ese módulo.

Así que básicamente usarás providedIn: 'root' para cualquier servicio que sea de aplicación amplia. Para otros servicios sigue usando la versión antigua.

No olvide que ya tuvo la opción de proporcionar un servicio diferente. Por ejemplo, también es posible declarar Inyectable a nivel de componente (esto no cambia en V6).

  @Component({
    selector: 'app-my-component',
    templateUrl: './my.component.html',
    providers: [ MyService ]
  })

De esta manera el servicio solo estará disponible en MyComponent y su árbol de subcomponentes.

 8
Author: JEY,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-05-07 10:43:34