Angular 2:Type ChildComponent是2个模块声明的一部分:parent1Module和Parent2Module

时间:2017-03-24 07:17:23

标签: angular

我有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

请帮我解决我在这里做错了什么。

1 个答案:

答案 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:[...]
})