template example content angular angular2-directives angular2-services angular2-forms

example - ¿Qué es multi proveedor en angular2?



ng-content select angular 6 (3)

De los documentos:

Crea múltiples proveedores que coinciden con el mismo token (un proveedor múltiple). Los proveedores múltiples se utilizan para crear un servicio conectable, donde el sistema viene con algunos proveedores predeterminados, y el usuario puede registrar proveedores adicionales. La combinación de los proveedores predeterminados y los proveedores adicionales se utilizará para impulsar el comportamiento del sistema.

Source

Entiendo que el proveedor es para obtener servicio de otra clase, pero ¿qué es el token y el proveedor múltiple?

¿Y también cuando hacemos multi=true ?

provide(NG_VALIDATORS, { useExisting: class), multi: true })


El uso de multi: true le dice a Angular que el proveedor es un proveedor múltiple. Como se mencionó anteriormente, con múltiples proveedores, podemos proporcionar múltiples valores para un solo token en DI.

Usos:

Si tenemos un par de directivas que deberían estar disponibles automáticamente en toda nuestra aplicación sin que alguien tenga que definirlas en decoraciones de componentes, podemos hacerlo aprovechando los proveedores múltiples y extendiendo lo que se está inyectando para PLATFORM_DIRECTIVES .

@Directive(...) class Draggable { } @Directive(...) class Morphable { } @Component(...) class RootCmp { }

y

// at bootstrap bootstrap(RooCmp, [ provide(PLATFORM_DIRECTIVES, {useValue: Draggable, multi: true}), provide(PLATFORM_DIRECTIVES, {useValue: Morphable, multi: true}) ]);

Details


multi: true significa que un token de proveedor proporciona una matriz de elementos. Por ejemplo, todas las directivas para el enrutador son compatibles routerLink router-outlet , el router-outlet lo proporciona ROUTER_DIRECTIVES .
Si un nuevo proveedor está registrado con el token ROUTER_DIRECTIVES , entonces reemplaza las directivas previamente registradas. Si se establece multi: true (en el primer proveedor registrado y el nuevo), las nuevas directivas se agregan a las directivas previamente registradas en lugar de anularlas.

Cuando se inyecta constructor(@Inject(ROUTER_DIRECTIVES) directives) {} ) se inyecta una matriz de instancias de directivas. Generalmente no tiene sentido inyectar ROUTER_DIRECTIVES . Lo usé solo como ejemplo porque es multi: true .