所以我使用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 []中的指令一样完成?
答案 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。
答案 2 :(得分:0)
我认为实际上并不需要,因为 WidgetsModule 与 FormsModule (@ angular / forms)相同。 WidgetsModule是用户定义的模块,由angular提供FormsModule。这是唯一的区别。这两个模块都用于执行某些功能。
所以,只要想一想我们如何声明 FormsModule 一次并在所有其他模块中使用它,如果您了解那么问题就解决了。
请访问以下链接One single NgModule versus multiples ones with Angular 2