Angular 6 - Импорт общего модуля для дочерних модулей

Я пытаюсь сделать общий модуль, но он не хочет как-то работать.

Общий модуль выглядит следующим образом:

import { ModuleWithProviders, NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';

import { SharedMetaModule } from './shared-meta';
import { ApplicationState } from './state/application-state';
import { MilitaryTimePipe } from './pipes/military-time-pipe';
import { KeysPipe } from './pipes/object-pipe';
import { GirlsClass } from './advertisers/girls';

@NgModule({
    imports: [CommonModule],
    declarations: [
        KeysPipe,
        MilitaryTimePipe
    ],
    exports: [
        SharedMetaModule,
        KeysPipe,
        MilitaryTimePipe
    ],
    providers: [ApplicationState]
})
export class SharedModule {
    static forRoot(): ModuleWithProviders {
        return { ngModule: SharedModule };
    }
}

У меня есть app.module.ts, как это:

import { SharedModule } from '@shared/shared.module';
@NgModule({
    imports: [
        ...
        SharedModule.forRoot(),

Тогда у меня есть profile-gallery.module.ts, где будет использоваться канал из общего модуля

Если я не импортирую общий модуль в модуль profile-gallery, я получаю эту ошибку:

The pipe 'keys' could not be found.

Если я импортирую общий модуль в модуль profile-gallery, я получаю эту ошибку:

MetaModule already loaded; import in root module only.

Как может работать общий модуль в этой ситуации?

1 ответ

Решение

Назначение общего модуля состоит в том, чтобы импортировать его во все необходимые модули более одного раза. Таким образом, нет необходимости в методе forRoot, который гарантирует, что он импортируется только один раз.

Полностью удалите метод forRoot и импортируйте модуль, где это необходимо:

import { SharedModule } from '@shared/shared.module';
@NgModule({
    imports: [
        ...
        SharedModule,
Другие вопросы по тегам