12

所以我正在使用 Angular 2 final (2.0.0),假设我创建了一个 WidgetsModule,其中包含一堆指令和组件,这些指令和组件将帮助我构建我的应用程序,然后将其导入我的 AppModule

import { NgModule }      from '@angular/core';
import { UniversalModule } from 'angular2-universal';

import { WidgetsModule } from '../../../widgets';
import { App, appRouting } from './';

@NgModule({
  imports:      [
    UniversalModule,
    WidgetsModule,
    appRouting
  ],
  providers:    [ AppPresenter ],
  declarations: [ App ],
  exports:      [ ],
  bootstrap:    [ App ]
})
export class AppModule { }

然后我想在子模块中使用小部件,如 HomeModule、CartModule 等。如何使小部件可用而不必在每个其他模块中导入 WidgetsModule?

import { NgModule }      from '@angular/core';
import { CommonModule } from '@angular/common';
import { FormsModule, ReactiveFormsModule } from '@angular/forms'

import { WidgetsModule } from '../../../widgets';
import { Cart, cartRouting } from './';

@NgModule({
  imports:      [
    CommonModule,
    FormsModule,
    ReactiveFormsModule,
    WidgetsModule,  //<-- I want to avoid doing this in every module
    cartRouting
  ],
  providers:    [ ],
  declarations: [ Cart ]

})
export class CartModule { }

有没有办法像使用exports []中的指令一样做到这一点?

4

3 回答 3

15

它直接需要访问它自己的WidgetsModule,就像它需要直接访问它自己的一样FormsModule一种或另一种方式)。不过,清理它的一种方法是从SharedModule. 然后你可以导入SharedModule无处不在

@NgModule({
  exports: [
    FormsModule,
    CommonModule,
    WidgetsModule
  ]
})
class SharedModule {}

您不需要将imports它们中的任何一个放入其中,SharedModule除非说您正在声明一个SharedModule使用任何其他模块的组件。

然后在所有其他模块中,imports只需SharedModule. 这最终清理了很多,您只需要维护一个共享模块。

也可以看看:

于 2016-10-08T01:12:29.427 回答
3

模块不会继承对在其他模块中声明的组件、指令或管道的访问。AppModule 导入的内容与 ContactModule 无关,反之亦然。在 ContactComponent 可以与 [(ngModel)] 绑定之前,它的 ContactModule 必须导入 FormsModule。

来源:ngmodule

于 2016-10-13T19:40:12.597 回答
0

我认为实际上不需要,因为WidgetsModuleFormsModule (@angular/forms) 相同。WidgetsModule 是用户自定义模块和 Angular 提供的 FormsModule。这是唯一的区别。这两个模块都用于执行某些功能。

所以想想我们如何一次声明FormsModule并在所有其他模块中使用它,如果你理解了,那么问题就解决了。

只需访问以下链接 一个 NgModule 与 Angular 2 的多个

于 2016-10-07T20:52:56.093 回答