2017-09-23 4 views
2

J'exporte un composant personnalisé dans mon AppModule mais je ne peux pas l'utiliser dans un autre module importé dans AppModule. Je pensais que les composants exportés sont visibles globalement?Composant exporté angulaire du module non utilisable dans un autre module

J'essaie d'utiliser le CalendarComponent avec le sélecteur 'app-calendar' dans un composant du TestModule.

app.module.ts

@NgModule({ 
    declarations: [ ... , 
    CalendarComponent, 
    ], 
    imports: [ ... , 
    TestModule, 
    ], 
    exports: [ ... 
    CalendarComponent, 
    ], 
    providers: [ ... ], 
    bootstrap: [AppComponent] 
}) 

test.module.ts

@NgModule({ 
    declarations: [ ... , 
    TestComponent 
    ], 
    imports: [ ... ], 
    exports: [ ... ], 
    providers: [ ... ] 
}) 

test.component.html

<app-calendar></app-calendar> 

Console jette l'erreur 'app-calendrier' n'est pas un élément connu (ne fait pas partie du module)

Qu'est-ce qui me manque?

+0

TESTM odule doit importer le module qui exporte le composant Calendrier – yurzui

+0

vous pouvez lire [Éviter les confusions courantes avec les modules en Angulaire] (https://blog.angularindepth.com/avoiding-common-confusions-with-modules-in-angular-ada070e6891f) –

+0

@yurzui AppModule importe déjà TestModule pour que TestModule ne puisse pas importer AppModule car cela serait une dépendance circulaire ou est-ce que je me trompe? – user3740359

Répondre

2

Créer CalendarModule ou ajouter Calendar composant à votre module de partage (dépend de votre architecture) comme:

calendar.module.ts

@NgModule({ 
    declarations: [CalendarComponent], 
    exports: [CalendarComponent] 
}) 
export class CalendarModule {} 

Dans AppModule éliminent CalendarComponent partout et l'importation CalendarModule (ou SharedModule) si certaines déclarations utilisent CalendarComponent

app.module.ts

@NgModule({ 
    declarations: [ ... , 
    CalendarComponent, <== remove it 
    ], 
    imports: [ 
    TestModule, 
    // import CalendarModule here if any of declarations above 
     use CalendarComponent in their template 
    ], 
    exports: [ ... 
    CalendarComponent, // remove it 
    ], 
    bootstrap: [AppComponent] 
}) 
export class AppModule {} 

test.module.ts

@NgModule({ 
    declarations: [ ... , 
    TestComponent 
    ], 
    imports: [ 
    CalendarModule <=== add this, so TestComponent will be able 
         to use CalenderComponent in its template 
    ] 
}) 
export class TestModule {} 

Pour plus de détails, voir