web-dev-qa-db-ja.com

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があります。

プロファイルギャラリーモジュールで共有モジュールをインポートしないと、次のエラーが表示されます。

The pipe 'keys' could not be found.

共有モジュールをプロファイルギャラリーモジュールにインポートすると、次のエラーが表示されます。

MetaModule already loaded; import in root module only.

この状況で共有モジュールをどのように機能させることができますか?

8
user8778731

共有モジュールの目的は、必要なすべてのモジュールに複数回インポートすることです。したがって、1回だけインポートされることを保証するforRootメソッドは必要ありません。

forRootメソッドを完全に削除し、必要に応じてモジュールをインポートします。

import { SharedModule } from '@shared/shared.module';
@NgModule({
    imports: [
        ...
        SharedModule,
6
Adrian Fâciu