Угловой - должен ли HttpClientModule находиться в массиве Exports в CoreModule? - PullRequest
0 голосов
/ 09 мая 2018

Ну, я структурирую свой проект, следуя инфраструктуре:

  • Функциональный модуль.
  • Основной модуль.
  • Общий модуль.

Но есть кое-что, что у меня все еще недостаточно ясно.

Насколько я знаю, HttpClientModule должен быть в CoreModule, потому что ... он предоставляет сервис HttpClient для отправки HTTP-запросов на сервер.

Теперь массив imports позволяет модулю Angular использовать функции, предоставляемые в других модулях, а массив exports позволяет модулю Angular раскрывать некоторые из его функций.

У меня есть это в моем CoreModule:

@NgModule({
    imports: [
        BrowserAnimationsModule,
        HttpClientModule,
        RouterModule.forRoot(routes, {
            enableTracing: true
        })
    ],
    exports: [
        RouterModule
    ]
})
export class CoreModule {
}

Теперь, поскольку мой CoreModule импортирован в мой AppModule, разве не должны экспортироваться также HttpClientModule и BrowserAnimationsModule? Так же, как RouterModule.

Я вижу CoreModule и SharedModule как какой-то мост.

SharedModule имеет больше смысла для меня:

@NgModule({
    imports: [
        MatButtonModule
    ],
    exports: [
        MatButtonModule
    ]
})
export class SharedModule {
}

SharedModule импортирует MatButtonModule, а затем экспортирует его, чтобы другие модули могли использовать его.

Не должно ли CoreModule быть таким же? Потому что приложение работает нормально; однако я нахожусь в режиме разработки.

Надеюсь, я был достаточно ясен, и кто-то может помочь мне избавиться от этого сомнения.

Ответы [ 2 ]

0 голосов
/ 23 сентября 2018

Нет, массив exports модуля NgModule не должен включать модули без компонентов, директив или каналов (например, HttpClientModule).

Цель экспорта чего-либо из NgModule состоит в том, чтобы предоставить другим модулям (или вещам в этих других модулях) доступ к компонентам, директивам и каналам этого модуля , а также иногда дать этим другим модулям доступ для удобства (т.е. реэкспорта) компонентов, директив и каналов из какого-либо другого модуля.

Ваш CoreModule перечисляет RouterModule в качестве экспорта, так что все, что импортирует ваш CoreModule, может использовать директиву атрибута routerLink (среди прочего). То есть RouterModule экспортирует компоненты, директивы и / или трубы.

Поскольку HttpClientModule не объявляет какие-либо компоненты, директивы или каналы , нет никакого смысла перечислять его как экспорт NgModule.

Эти Угловые направляющие Часто задаваемые вопросы по NgModule также могут быть полезны:

0 голосов
/ 09 мая 2018

Я лично считаю, что BrowserAnimationsModule можно и нужно импортировать в сам AppModule.

Вам не нужно экспортировать HttpClientModule, если все ваши службы, использующие HttpClient, находятся в самом CoreModule.

Даже если вы используете HttpClient в других модулях, вы можете просто импортировать HttpClientModule в этот конкретный модуль или сделать это в AppModule (за исключением лениво загруженных модулей).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...