Многие модули, использующие один и тот же компонент, вызывают ошибку-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 к экспорту общего модуля. Затем вы импортируете общий модуль в другие модули, где вы хотите использовать этот компонент.
узнать подробнее здесь
надеюсь, что это поможет!