web-dev-qa-db-fra.com

Angular 6 - Importation d'un module partagé pour les modules enfants

J'essaie de créer un module partagé, mais il ne veut pas fonctionner d'une manière ou d'une autre.

Le module partagé ressemble à ceci:

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 };
    }
}

J'ai un app.module.ts comme celui-ci:

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

Ensuite, j'ai un profile-gallery.module.ts où un tuyau du module partagé serait utilisé.

Si je n'importe pas le module partagé dans le module de galerie de profils, j'ai eu cette erreur:

The pipe 'keys' could not be found.

Si j'importe le module partagé dans le module de galerie de profils, j'ai eu cette erreur:

MetaModule already loaded; import in root module only.

Comment pourrait fonctionner le module partagé dans cette situation?

8
user8778731

Le but d'un module partagé est de l'importer dans tous les modules requis, plusieurs fois. Il n'est donc pas nécessaire d'utiliser la méthode forRoot qui garantit qu'elle n'est importée qu'une seule fois.

Supprimez complètement la méthode forRoot et importez le module si nécessaire:

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