¿Qué es viewProviders en el siguiente código? ¿Y en qué se diferencia de los proveedores?
class Greeter { greet(name:string) { return 'Hello ' + name + '!'; } } @Component({ selector: 'greet', viewProviders: [ Greeter ], template: `<needs-greeter></needs-greeter>` }) class HelloWorld { }En su ejemplo, no hay diferencia entre proveedores y viewProviders porque la plantilla de HelloWorld no usa <ng-content> . Si estaba proyectando contenido dentro de <ng-content>...</ng-content> , no se podría inyectar Greeter en el contenido proyectado porque está usando
viewProviders: [Greeter]Si quisiera que Greeter se inyectara potencialmente en el contenido proyectado, usaría
providers: [Greeter] Por lo tanto, viewProviders limita el proveedor a los niños que no sean contenido proyectado, mientras que los providers permiten que todos los niños usen el proveedor. El valor es que viewProviders le permite evitar que el contenido proyectado interfiera con sus servicios, lo que podría ser especialmente útil en las bibliotecas.
compartir una instancia de un servicio en toda la aplicación -> configurarlo en los proveedores del módulo raíz [AppModule]
compartir una instancia de un servicio en todo el módulo -> configurarlo en los proveedores de ese módulo
compartir una instancia de un servicio en todo el Componente -> configurarlo en los proveedores de ese Componente
comparta una instancia de un servicio a través del Componente [solo ViewChildren no ContentChildren] -> configúrelo en viewProviders de ese Componente