我有2个父组件和1个子组件。我的项目结构如下:
app
-> app.module.ts
-> app.component.ts
-> app.routing.module.ts
parentComponent1
-> parent1.module.ts
-> parent1.component.ts
parentComponent2
-> parent2.module.ts
-> parent2.component.ts
childComponent
-> child.module.ts
-> child.component.ts
现在我的问题是当我在parentComponent1和parentComponent2中使用子组件的选择器时:
<child-component [name]="parent1"></child-component>
并将父组件中的子模块导入为:
parent1.module.ts -
@NgModule({
imports:[ChildModule],
declarations:[ChildComponent]
})
----
----
and so on....
在parentComponent2的Moudle中也是如此:
parent2.module.ts -
@NgModule({
imports:[ChildModule],
declarations:[ChildComponent]
})
----
----
and so on....
现在,当我启动项目时,我的默认路由转到parentComponent1并且控制台中没有错误并且工作正常,但是当我转到parentComponent2时,错误会在控制台中显示为:
未处理的Promise拒绝:键入ChildComponent的一部分 2个模块的声明:Parent1Module和Parent2Module!请 考虑将ChildComponent移动到更高的导入模块 Parent1Module和Parent2Module。您还可以创建一个新的NgModule 导出并包含ChildComponent然后导入该NgModule Parent1Module和Parent2Module
请帮我解决我在这里做错了什么。
答案 0 :(得分:8)
使用此解决方案
你不应该在一个以上的NgModule中声明一个组件,你可以在一个NgModule中导出,然后在其他NgModule中导入这个NgModule。
<强> child.module.ts 强>
@NgModule({
imports:[...],
declarations:[ChildComponent],
exports:[ChildComponent]
})
<强> parent1.module.ts 强>
@NgModule({
imports:[ChildModule],
declarations:[...]
})
<强> parent2.module.ts 强>
@NgModule({
imports:[ChildModule],
declarations:[...]
})