I have created a small component (LoadingComponent
) in the root of my application and declared it (obviously) in my AppModule
. This component is used when my application is loading and should show some fancy loading animations.
Now I want to use it in a child module when I save something. But I am always getting errors when I want to use this component in another module.
I exported the LoadingComponent in my AppModule:
import { ButtonsModule } from './buttons/buttons.module';
import { FormsModule } from '@angular/forms';
import { StatusLightsDisplayComponent } from './status-lights-display/status-lights-display.component';
import { StatusLightsContainerComponent } from './status-lights-container/status-lights-container.component';
import { HttpModule } from '@angular/http';
import { ReportsService } from './services/reports.service';
import { BrowserModule } from '@angular/platform-browser';
import { forwardRef, NgModule } from '@angular/core';
import { AppComponent } from './app.component';
import { GeneralInformationComponent } from './general-information/general-information.component';
import { TextfieldsComponent } from './textfields/textfields.component';
import { LoadingComponent } from './loading/loading.component';
@NgModule({
declarations: [
AppComponent,
GeneralInformationComponent,
TextfieldsComponent,
StatusLightsContainerComponent,
StatusLightsDisplayComponent,
LoadingComponent
],
imports: [
BrowserModule,
HttpModule,
FormsModule,
ButtonsModule
],
exports: [
LoadingComponent
],
providers: [
ReportsService
],
bootstrap: [AppComponent]
})
export class AppModule { }
The module I want to use the LoadingComponent
is called ButtonsModule
. So I tried to import the AppModule
in my ButtonsModule
. But I am getting the error: Unexpected value 'undefined' imported by the module 'ButtonsModule'
Here is my ButtonsModule:
import { AppModule } from '../app.module';
import { LoadingComponent } from '../loading/loading.component';
import { BottomComponent } from './bottom/bottom.component';
import { CalendarComponent } from './top/calendar/calendar.component';
import { CommonModule } from '@angular/common';
import { ExportService } from '../services/export.service';
import { forwardRef, NgModule } from '@angular/core';
import { FunctionsComponent } from './functions/functions.component';
import { NavArrowsComponent } from './shared/nav-arrows/nav-arrows.component';
import { SaveButtonComponent } from './shared/save-button/save-button.component';
import { TopComponent } from './top/top.component';
@NgModule({
imports: [
CommonModule,
AppModule
],
exports: [
TopComponent,
FunctionsComponent,
BottomComponent
],
declarations: [
TopComponent,
BottomComponent,
FunctionsComponent,
NavArrowsComponent,
SaveButtonComponent,
CalendarComponent
],
providers: [
ExportService
]
})
export class ButtonsModule { }
I guess some of you already recognize some fail here :) But please read it to the end.
I know the best practice here would be to create a shared module and then import this in my AppModule
and the ButtonsModule
, but this seems to be a little overkill, just for such a small component and it would also be my only shared module here. It would also create a lot of overhead.
My questions:
- Am I doing something wrong here? If yes, what is it?
- Would be the way, by creating a shared module, the right one?
- Why is my approach not working? I mean, what is forbidding my approach under the hood of Angular and why?
What if I import the same module twice?
Link
Everything at the end compiles down to the Main App Module and importing it again in same module make the above condition true of circular dependency. And being the main Module it should ideally not have any exports to be used by other Modules.