我制作了一个类似here描述的Angular2应用。它有两个组件(A,B),由全局app.module
导入。我的想法是,在app.module
中包含共享模块,所以我不需要用冗余代码搞乱每个模块。我希望以FormsModule
为例。所以在app.module
我有
imports: [
UniversalModule,
CommonModule,
FormsModule,
AModule
RouterModule.forRoot([])
],
exports: [FormsModule]
但是在A模块中,我得到了异常Can't bind to 'ngModel' since it isn't a known property of 'select'.
,这似乎是由缺少的FormsModule
引起的。它只有在我使用FormsModule
导入每个子模块中的imports: [FormsModule]
时才有效。这正是我想要避免的。
根据this question,我尝试在子模块A中导入AppModule
。这不起作用并给我例外Exception: Call to Node module failed with error: Error: Unexpected value 'undefined' imported by the module 'AModule'
如何继承子模块的导入?我也需要这个用于管道。
答案 0 :(得分:8)
只需创建一个功能模块(或共享模块),用于导出通常一起使用的组件,指令和管道,并将此模块导入要使用其中任何一个的模块。
无法在全球范围内提供组件,指令或管道。需要将它们添加到使用它们的每个模块的导入中。 您所能做的就是组合模块,并通过仅导入一个或几个模块使它们可用。
答案 1 :(得分:7)
似乎只能使用收集共享导入的共享模块来完成,例如@GünterZöchbauer说。我找到an example in the official docs,我用它作为基础来创建我的共享模块:
import { CommonModule } from '@angular/common';
import { NgModule } from '@angular/core';
import { FormsModule } from '@angular/forms';
import { ObjectKeysPipe } from './../shared/pipes/object-keys.pipe';
@NgModule({
imports: [CommonModule],
declarations: [
ObjectKeysPipe
],
exports: [
CommonModule,
FormsModule,
ObjectKeysPipe
]
})
export class GlobalSharedModule{}
这与我共享自定义管道(ObjectKeysPipe
),并广泛使用CommonModule
和FormModule
。减少还原剂混乱的想法奏效了。在我的应用程序模块中,我不需要添加一堆导入/声明。相反,我只需要像这样导入我的共享模块:
import { GlobalSharedModule } from './../shared/global-shared.module';
@ngModule({
imports: GlobalSharedModule
})