Многие модули, использующие один и тот же компонент, вызывают ошибку-Angular 2

У меня есть общий компонент gocomponent, который я хочу использовать в 2 модулях: FindPageModule и AddPageModule.

когда я добавляю его в объявления "FindPageModule" и в моем "AddPageModule", я получаю ошибку:

найти: 21 ошибка: (SystemJS) тип GoComponent является частью объявлений из 2 модулей: FindPageModule и AddPageModule! Пожалуйста, подумайте о переезде GoComponent к более высокому модулю, который импортирует FindPageModule и AddPageModule. Вы можете также создайте новый NgModule, который экспортирует и включает GoComponent затем импортирует этот NgModule в FindPageModule и AddPageModule.

поэтому я беру его из них обоих и добавляю его в объявления AppModule, который импортирует FindPageModule и AddPageModule, и я получаю ошибку в компоненте под названием "FindFormComponent" , который находится в объявлениях FindPageModule и использует "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

Как разрешить компоненты, такие как FindFormComponent, которые объявлено в FindPageModule использовать GoComponent, а также пусть компоненты, объявленные AddPageModule использовать GoComponent?

2 ответов


да, компоненты могут быть объявлены только в одном модуле, и их доступ не наследуется каким-либо образом, то есть объявление его в основном модуле приложения не даст вам доступа к нему в любом другом модуле.

Если у вас есть компонент, который используется другими модулями, обычно они идут, чтобы поместить его в общий модуль

включить компонент в общий модуль:

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

Как использовать общий модуль в другом месте:

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

посмотреть Также


Если вы хотите использовать GoComponent для нескольких модулей, вы должны создать "общий" модуль и добавить GoComponent к экспорту общего модуля. Затем вы импортируете общий модуль в другие модули, где вы хотите использовать этот компонент.

узнать подробнее здесь

надеюсь, что это поможет!