2016-09-13 66 views
3

我正在经历艰难的时间才能让模块在Angular 2中工作。 我已创建a plunk来演示此问题。 在plunk中,你会看到我有app.module。此模块导入app-common.module,其中包含一个显示页眉的组件。顶层组件的模板app.component包含此组件的选择器。 这里的app.common.module:Angular 2找不到在我的特性模块中声明的组件

@NgModule({ 
imports:[CommonModule, FormsModule], 
declarations: [PageHeaderComponent] 
}) 
export class AppCommonModule { } 

这里的app.module:

@NgModule({ 
imports:  [AppCommonModule, BrowserModule], 
declarations: [AppComponent ], 
bootstrap: [ AppComponent ] 
}) 
export class AppModule { } 

当应用程序运行时,它引发错误认为 “REF-pageheader” 不是已知的元件。如果我在app.module中声明组件,它就可以正常工作。 那么,为什么我不能在一个导入到主app.module的模块中声明这个组件?看来Angular在完成这个任务时找不到它。我究竟做错了什么?我错过了什么吗?

回答

6

我想你应该导出它想:

@NgModule({ 
    imports:[CommonModule, FormsModule], 
    declarations: [PageHeaderComponent], 
    exports: [PageHeaderComponent] 
}) 
export class AppCommonModule { } 

这样的其他组件可以使用组件。

否则PageHeaderComponent将只提供内部AppCommonModule

看到也

我们出口ContactComponent是导入 ContactModule可以将其包含在这样的其它模块他们的组件模板。

所有其他声明的接触类是私人默认

出口申报类,在其他模块组件应该 能够在他们的模板来引用。这些是你的公开课。 如果您不导出类,它将保持私有状态,只有在此模块中声明的其他 组件才可见。

+0

太棒了!我完全错过了这一点!谢谢。 –

+0

不客气!你也可以看一下material2的源代码https://github.com/angular/material2/blob/master/src/lib/button/button.ts#L162。这是一个非常好的起点 – yurzui

+0

你是一个巨大的帮助!这么简单,但我错过了!再次感谢。 –

相关问题