modules generate feature example create angular ng-modules

generate - Muchos módulos que usan el mismo componente causan un error-Angular 2



ng generate module (2)

Sí, los componentes se pueden declarar solo en un módulo, y su acceso tampoco se hereda de ninguna manera, lo que significa que declararlo en el módulo principal de la aplicación no le dará acceso a él en ningún otro módulo.

Si tiene un componente que es usado por otros módulos, por lo general, la forma de hacerlo es colocarlo en un módulo compartido.

Incluir componente en un módulo compartido:

@NgModule({ declarations: [ SharedComponent ], exports: [ SharedComponent ] }) class SharedModule {}

Cómo utilizar el módulo compartido en otro lugar:

@NgModule({ imports: [ SharedModule ] }) class ModuleWithComponentThatUsesSharedComponent {}

Ver también

  • Angular2 Cómo limpiar el AppModule

Tengo un componente compartido llamado GoComponent que quiero usar en 2 módulos: FindPageModule y AddPageModule.

Cuando lo agrego en las declaraciones de "FindPageModule" y en mi "AddPageModule" obtengo un error:

encontrar: 21 Error: (SystemJS) El tipo GoComponent es parte de las declaraciones de 2 módulos: FindPageModule y AddPageModule! Considere mover GoComponent a un módulo superior que importe FindPageModule y AddPageModule. También puede crear un nuevo NgModule que exporte e incluya GoComponent y luego importe ese NgModule en FindPageModule y AddPageModule.

Así que lo saco de ambos y lo agrego en las declaraciones de AppModule, que importan FindPageModule y AddPageModule, y recibo un error en un componente llamado "FindFormComponent" que está en las declaraciones de FindPageModule y usa "GoComponent":

zone.js:355 Unhandled Promise rejection: Template parse errors: ''go'' is not a known element: 1. If ''go'' is an Angular component, then verify that it is part of this module. 2. If ''go'' is a Web Component then add "CUSTOM_ELEMENTS_SCHEMA" to the ''@NgModule.schemas'' of this component to suppress this message. (" style="height:64px;"> <div style="position: relative; display: inline-block; width: 100%;"> [ERROR ->]<go></go> </div> </div> "): FindFormComponent@101:4 ; Zone: <root> ; Task: Promise.then ; Value: Error: Template parse errors:(…) Error: Template parse errors: ''go'' is not a known element: 1. If ''go'' is an Angular component, then verify that it is part of this module. 2. If ''go'' is a Web Component then add "CUSTOM_ELEMENTS_SCHEMA" to the ''@NgModule.schemas'' of this component to suppress this message. (" style="height:64px;"> <div style="position: relative; display: inline-block; width: 100%;"> [ERROR ->]<go></go> </div> </div> "): FindFormComponent@101:4

¿Cómo permito que los componentes como FindFormComponent que están declarados en FindPageModule utilicen GoComponent y que los componentes declarados por AddPageModule utilicen GoComponent?


Si desea utilizar GoComponent en varios módulos, debe crear un módulo "compartido" y agregar GoComponent a las exportaciones del módulo compartido. Luego, importa el módulo compartido en los otros módulos en los que desea utilizar este componente.

Encuentra más información here

¡Espero que esto ayude!