16

我制作了一个如此处所述的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]. 这正是我想要避免的。

根据这个问题,我尝试AppModule在子模块A中导入。这不起作用并给我异常Exception: Call to Node module failed with error: Error: Unexpected value 'undefined' imported by the module 'AModule'

如何将导入继承到子模块?我也需要这个来做管道。

4

2 回答 2

9

只需创建一个功能模块(或共享模块)来导出通常一起使用的组件、指令和管道,然后将此模块导入您想要使用其中任何一个的模块。

无法使组件、指令或管道在全球范围内可用。需要将它们添加到使用它们的每个模块的导入中。您所能做的就是组合模块并通过仅导入一个或几个模块来使它们可用。

于 2017-02-12T20:06:36.920 回答
8

似乎这只能使用共享模块来完成,该模块收集共享导入,就像@Günter Zöchbauer 说的那样。我在官方文档中找到了一个示例,我将其用作创建共享模块的基础:

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) 并且广泛使用CommonModuleFormModule. 减少冗余混乱的想法奏效了。在我的应用程序模块中,我不需要添加一堆导入/声明。相反,我只需要像这样导入我的共享模块:

import { GlobalSharedModule } from './../shared/global-shared.module';
@ngModule({
    imports: GlobalSharedModule
})
于 2017-02-13T16:57:19.610 回答