如何从Angular2中的另一个模块继承模块?

时间:2016-10-07 20:39:02

标签: inheritance angular ng-modules

所以我使用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 []中的指令一样完成?

3 个答案:

答案 0 :(得分:11)

直接需要访问自己的WidgetsModule,就像它需要直接访问它自己的FormsModule以某种方式)一样。清理它的一种方法是从SharedModule 导出在多个地方使用的所有模块。然后,您只需导入SharedModule无处不在

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

除非您声明imports中使用任何其他模块的组件,否则您不需要SharedModule SharedModule imports中的任何组件。

然后在所有其他模块中,只需SharedModule current_user。这最终会清理它,你只需要维护一个共享模块。

另见:

答案 1 :(得分:3)

  

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

source: ngmodule

答案 2 :(得分:0)

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

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

请访问以下链接One single NgModule versus multiples ones with Angular 2