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?
AppModule
in different modules in my app? Why is it so? – ToeholdAppModule
, because otherwise it is not possible to use the same component in two different modules. – ToeholdAppModule
and pack them at least in one big child module. Or am I missing something? – ToeholdAppModule
will never have an export array declared? – Toehold