我应该在SharedModule-Angular中向导入添加模块吗?
这是我的共享模块我应该在SharedModule-Angular中向导入添加模块吗?,angular,typescript,angular-module,shared-module,Angular,Typescript,Angular Module,Shared Module,这是我的共享模块 import { CommonModule } from "@angular/common"; import { NgModule } from "@angular/core"; import { FormsModule, ReactiveFormsModule } from "@angular/forms"; import { IconModule } from "@my-app/components/icon/icon.module"; import { RequiredA
import { CommonModule } from "@angular/common";
import { NgModule } from "@angular/core";
import { FormsModule, ReactiveFormsModule } from "@angular/forms";
import { IconModule } from "@my-app/components/icon/icon.module";
import { RequiredActionDirective } from "@my-app/directives/required-action.directive";
@NgModule({
imports: [
CommonModule,
IconModule
],
declarations: [
RequiredActionDirective
],
exports: [
CommonModule,
IconModule,
FormsModule,
ReactiveFormsModule,
RequiredActionDirective
]
})
export class SharedModule { }
请注意,我只将Imports
添加到CommonModule
和IconModule
。我这样做是因为我在RequiredActionDirective
中使用了这些模块。但是导出
有更多的模块,因为将被导入共享模块
的其他模块使用
问题:我是否正确地认为我不需要将模块添加到
导入
,除非我想在共享模块
中直接使用它们?或者将来可能会出现一些我目前不知道的问题,因为现在一切正常?您不应该无缘无故地重新导出模块,而只导入当前模块依赖的模块。导入没有坏处,但导出会在提供者的依赖关系树中创建一个分支
模块重新导出模块后,导入的父模块将无法覆盖该导入。因此,在某些边缘情况下,这可能是一个问题
比如,
NgModule({
导入:[HttpClientModule],
提供:{provide:HTTP_拦截器,useClass:ExampleInterceptor,multi:true},
导出:[HttpClientModule]
})
导出类SharedModule{}
现在AppModule无法提供另一个拦截器
NgModule({
导入:[共享模块],
提供:{provide:HTTP_拦截器,useClass:AppInterceptor,multi:true}
//^^已忽略侦听器
})
导出类AppModule{}
原因是HttpClientModule
在SharedModule
级别的提供者树中声明,并从此点开始解析所有HTTP\u拦截器
要求AppModule
首先导入HttpClientModule
,然后导入SharedModule
NgModule({
导入:[HttpClientModule,SharedModule],
提供:{provide:HTTP_拦截器,useClass:AppInterceptor,multi:true}
})
导出类AppModule{}
现在,HttpClientModule
在AppModule
级别声明,并向下解析所有提供程序,包括SharedModule
。imports:[]
数组中的顺序并不重要。我同意,但您的案例考虑了不同的供应商。SharedModule的假设是聚合我想在每个模块中使用的最常见的模块。我问是否需要在进一步出口之前进口,但似乎我不需要。:)