Angular2 - 在两个不同的模块中声明一个组件

时间:2016-09-28 19:29:34

标签: angular

我创建 DynamicForm 组件将其连接到两个NgModule中。

//  Module 1
@NgModule({
    imports: [],
    exports: [],
    declarations: [
        DynamicForm
    ],
    providers: []
})

//  Module 2
@NgModule({
    imports: [],
    exports: [],
    declarations: [
        DynamicForm
    ],
    providers: []
})

但是项目不起作用,任何错误。当我从其中一个NgModule中删除 DynamicForm 时,我需要包含此组件。此外,我尝试将 DynamicForm 连接到 app.module 并从NgModule中删除,但也无法正常工作。

怎么办?

2 个答案:

答案 0 :(得分:3)

组件只能是一个模块的一部分。因此,如果您有一个应该由多个模块使用的组件,请创建一个共享模块,在那里声明它,然后导出以便其他人可以使用它。然后将该共享模块导入到您需要该组件的模块中

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

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

答案 1 :(得分:0)

扩展用户:@peeskillet回答

在两个不同模块中声明组件的两种方法:

  1. 根据@peeskillet的回答,创建一个共享模块并在那里声明您的组件(以及任何其他共享组件),然后在另一个模块中导入共享模块,在该模块中您要将共享组件用作依赖性。

  2. 为依赖组件本身创建一个单独的模块,并将组件模块导入另一个要将共享组件用作依赖关系的模块中。这样做的好处是,您只需导入所需内容而不是共享模块中的其他组件。

  3. import { NgModule } from '@angular/core';
    import { CommonModule } from '@angular/common';
    import { MyComponent } from './my.component';
    
    @NgModule({
      imports: [
        CommonModule
      ],
      exports: [MyComponent],
      declarations: [MyComponent]
    })
    export class MyComponentModule { }