Saltar al contenido

¿Qué son los proveedores en Angular2?

Haz todo lo posible por interpretar el código de forma correcta antes de usarlo a tu trabajo y si tdeseas aportar algo puedes dejarlo en los comentarios.

Solución:

Los proveedores suelen ser objetos singleton (una instancia), a los que otros objetos tienen acceso a través de la inyección de dependencia (DI).

Si planea usar un objeto varias veces, por ejemplo Http servicio en diferentes componentes, puede solicitar la misma instancia de ese servicio (reutilizarlo). Lo haces con la ayuda de DI por Proporcionar una referencia al mismo objeto que DI crea para usted.

@Component)
  ..
  providers: [Http]

..en lugar de crear un nuevo objeto cada vez:

@Component)
class Cmp 
  constructor() 
    // this is pseudo code, doens't work
    this.http = new Http(...options);
  

Esta es una aproximación, pero esa es la idea general detrás de la inyección de dependencia: dejar que el marco maneje la creación y el mantenimiento de objetos reutilizables… Proveedor es el término de Angular para estos objetos reutilizables (dependencias).

Registrar inyectables

Los proveedores dan a conocer los inyectables al DI de Angular y definen el alcance de un inyectable (servicio).

Jerarquía de inyectores

El DI de Angular crea un árbol de inyectores (padre> hijo> nieto>…) que se asemeja a la estructura de sus componentes y directivas.

Instancia única por proveedor

Los proveedores se mantienen por inyector. Cada proveedor proporciona una única instancia de un inyectable.

búsqueda de proveedores

Cuando un componente o directiva tiene una dependencia (parámetro de constructor), DI comienza a buscar proveedores en el inyector de este componente. Si tiene uno, solicita la instancia de este proveedor y la inyecta.

Si el inyector no tiene proveedor para el pedido key (tipo), luego se visita el inyector principal, hasta la raíz (arranque) hasta que se encuentra un proveedor y se puede inyectar su instancia. (Si no se encuentra ningún proveedor, DI arroja un error).

Definir el alcance de una instancia inyectable

De esta forma se puede definir el alcance de un servicio compartido, porque DI comienza a buscar desde el componente donde se solicita una instancia hacia arriba hasta encontrar una.

Singleton o no

La cantidad de lugares en los que proporciona un inyectable determina cuántas instancias se crearán (solo se instancian si realmente se solicitan).

Si desea una sola instancia para toda su aplicación, proporcione solo un inyectable una vez en el componente raíz (o con bootstrap(AppComponent, [...]) lo que resulta en el mismo comportamiento.

Si desea una nueva instancia para cada componente Aluego agréguelo a los proveedores del componente A.

(actualización) NgModule perezoso y no perezoso

Con la introducción de NgModule módulos, se introdujeron niveles adicionales. Los proveedores registrados con módulos de carga no diferida están por encima del componente raíz en la jerarquía.

Los módulos con carga diferida están por encima de los componentes y las directivas cargadas por estos componentes.

Debido a que los proveedores son de solo lectura después de que se crea un inyector, no hay forma de agregar proveedores desde módulos con carga diferida al inyector raíz. Por lo tanto, los módulos con carga diferida obtienen su propio alcance raíz.

Ver también https://stackoverflow.com/a/45231440/217408

Piense en los proveedores como una receta que le dice a Angular cómo inyectar un servicio.

A menudo declaramos proveedores en angular de esta manera:

providers: [AnyService]

Esta es solo una abreviatura de esto:

[new Provider(AnyService, useClass: AnyService)]

Ambos enfoques dicen: siempre que alguien requiera “AnyService”, proporcione la clase “AnyService”

Vea que aunque estoy proporcionando la misma clase en el ejemplo anterior, en otro escenario podría hacer algo como esto.

[new Provider(AnyService, useClass: AnyServiceCustom)]

Pero en ambos escenarios, el constructor seguiría siendo el mismo:

constructor( private _anyService: AnyService) 

Para comprenderlo mejor, debe comprender cómo funciona la inyección de dependencia en Angular 2, ya que los proveedores están directamente relacionados con él.

Esta es una lectura obligada para todos los desarrolladores de angular 2.

https://angular.io/docs/ts/latest/guide/dependency-injection.html?The%20Provider%20class%20and%20provide%20function#!#injector-providers

Reseñas y calificaciones del post

Tienes la posibilidad mostrar este artículo si te fue útil.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *