Вы не должны повторно экспортировать модули без причины, а только импортировать модули, от которых зависит текущий модуль. Нет никакого вреда для import , но экспорт создает ветвь в дереве зависимостей для провайдеров.
Как только модуль реэкспортирует модуль родительский модуль, импортирующий его, не может переопределить этот импорт. Так что это может быть проблемой в некоторых крайних случаях.
Например;
NgModule({
imports: [HttpClientModule],
provide: { provide: HTTP_INTERCEPTORS, useClass: ExampleInterceptor, multi: true },
exports: [HttpClientModule]
})
export class SharedModule {}
Теперь модуль AppModule не может предоставить другой перехватчик.
NgModule({
imports: [SharedModule],
provide: { provide: HTTP_INTERCEPTORS, useClass: AppInterceptor, multi: true }
// ^^ interceptor is ignored
})
export class AppModule {}
Причина в том, что что HttpClientModule
становится объявленным в дереве поставщиков на уровне SharedModule
и разрешает все HTTP_INTERCEPTORS
с этой точки вниз .
Требуется, чтобы AppModule
импортировал сначала HttpClientModule
, а затем SharedModule
.
NgModule({
imports: [HttpClientModule, SharedModule],
provide: { provide: HTTP_INTERCEPTORS, useClass: AppInterceptor, multi: true }
})
export class AppModule {}
Теперь HttpClientModule
объявлен на уровне AppModule
и разрешает всех провайдеров вниз , включая SharedModule
. Порядок в массиве imports: []
не важен.