angular - modulos - Importación de módulos con forRoot()
que es un componente en angular (1)
Estoy repasando el ejemplo de Angular2 Material y veo que todos los módulos de Materiales se importan en el módulo raíz utilizando el método forRoot()
. Entonces en mi aplicación hago lo mismo.
Ahora necesito usar algunos componentes de Material dentro de otros módulos Compartidos, lo que significa que necesito importar los paquetes de Materiales relacionados en mi módulo Compartido. No estoy forRoot()
si necesito usar el método forRoot()
también al importarlos en el módulo Compartido.
Gracias de antemano por cualquier ayuda
forRoot
solo se usa para el módulo principal de la aplicación. Es una convención utilizada para que solo el módulo de la aplicación obtenga proveedores de aplicaciones / singleton. Esto es para evitar proveedores que se supone que son únicos, que se crean más de una vez para la aplicación. Por ejemplo
import { ModuleWithProviders } ''@angular/core'';
@NgModule({
declarations: [ SomeDirective ],
exports: [ SomeDirective ]
})
export class SharedModule {
static forRoot(): ModuleWithProviders {
return {
ngModule: SharedModule,
providers: [ AuthProvider ]
}
}
}
Aquí solo debemos llamar a forRoot
mientras se realiza la importación en el módulo de aplicación, para que pueda crear AuthProvider
solo una vez como singleton. Todos los otros módulos que necesitan el SharedModule
deberían simplemente importar ShareModule
para que pueda usar SharedDirective
.
Por lo tanto, al invocar forRoot
en el módulo de la aplicación obtendrá todo lo que le proporciona ese módulo (y, por lo general, los proveedores que vienen con la invocación de forRoot
) en el módulo de la aplicación. De modo que todos los componentes declarados en su módulo de aplicación tienen acceso a todo desde ese módulo.
Pero todo en las declarations
(esto incluye componentes, directivas y tuberías) no es heredado por ningún submódulo. Así que todavía tenemos que importar el módulo a cualquier otro módulo en el que lo necesitemos.
Su pregunta parece ser específicamente sobre su ShareModule
. Para este módulo, no debe usar forRoot
, por las razones que mencioné anteriormente. Solo debe exports
los módulos de MD. Solo utiliza imports
si algún componente declarado en ese SharedModule
realmente requiere algún módulo MD. Por ejemplo, si tiene un componente que usa el botón MD, y ese componente es un componente compartido que declara en el SharedModule
. En este caso, debe imports
y exports
. Pero si no hay tales componentes, solo necesita exports
. Esto proporciona el (los) módulo (s) MD a cualquier módulo en el que importe el SharedModule
.