Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我应该在SharedModule-Angular中向导入添加模块吗?_Angular_Typescript_Angular Module_Shared Module - Fatal编程技术网

我应该在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的假设是聚合我想在每个模块中使用的最常见的模块。我问是否需要在进一步出口之前进口,但似乎我不需要。:)