Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Lazy Loading BrowserModule has already been loaded

I am trying to implement lazy loading but getting error as following **

ERROR Error: Uncaught (in promise): Error: BrowserModule has already been loaded. If you need access to common directives such as NgIf and NgFor from a lazy loaded module, import CommonModule instead.

**

Need Help on this. Here are my Modules

  1. Shared MOdule
@NgModule({    declarations: [TimePipe],   providers: [     EmsEmployeeService,     EmsDesignationService,     EmsOrganizationService,     EmsAuthService,     AmsEmployeeService,     AmsShiftService,     ValidatorService,     AmsLeaveService,     AmsAttendanceService,     AmsDeviceService,     AmsOrganizationService,     AmsAlertService,     AmsHolidayService,     AutoCompleteService,     AmsTimelogsService,     LocalStorageService   ],   imports: [     HttpModule,     ToastyModule.forRoot(),     AgmCoreModule.forRoot({       apiKey: 'xxxxxxxxxxxxxxxxxxxxxxxxxxx'     }),   ],   exports: [     FormsModule,     HttpModule,     BrowserAnimationsModule,     RouterModule,     MaterialModule,     MdDatepickerModule,     MdNativeDateModule,     ToastyModule,     FileUploadModule,     NgxPaginationModule,     NguiAutoCompleteModule,     AgmCoreModule,     TimePipe   ] }) export class SharedModule { } 

2.SettingModule

 @NgModule({   imports: [     CommonModule,     SharedModule,     SettingsRoutingModule   ],   declarations: [     SettingsComponent,     ShiftsComponent,     DevicesComponent,     AlertsComponent,     HolidaysComponent,     AlterTypesComponent,     AlterEditComponent,     ShiftTypeNewComponent,     DeviceLogsComponent,     ChannelTypesComponent,     ChannelTypeEditComponent   ], exports: [     SettingsComponent,     ShiftsComponent,     DevicesComponent,     AlertsComponent,     HolidaysComponent,     AlterTypesComponent,     AlterEditComponent,     ShiftTypeNewComponent,     DeviceLogsComponent,     ChannelTypesComponent,     ChannelTypeEditComponent,   ] }) export class SettingsModule { } 
3.SettingRoutingModule 
const settings_routes: Routes = [   { path: '', redirectTo: 'shifts', pathMatch: 'full' },   { path: 'shifts', component: ShiftsComponent },   { path: 'shifts/new', component: ShiftTypeNewComponent },   { path: 'shifts/edit/:id', component: ShiftTypeNewComponent },   { path: 'devices', component: DevicesComponent },   { path: 'deviceLogs', component: DeviceLogsComponent },   { path: 'holidays', component: HolidaysComponent },   { path: 'alerts', component: AlertsComponent },   { path: 'alerts/types', component: AlterTypesComponent },   { path: 'alerts/:id', component: AlterEditComponent },   { path: 'channelTypes', component: ChannelTypesComponent },   { path: 'channelTypes/:id', component: ChannelTypeEditComponent } ];   const routes: Routes = [   { path: '', component: SettingsComponent, children: settings_routes } ];    @NgModule({   imports: [RouterModule.forChild(routes)],   exports: [RouterModule] }) export class SettingsRoutingModule { } 
  1. App-routing-module
const attdendance_routes: Routes = [   { path: '', redirectTo: 'daily', pathMatch: 'full' },   { path: 'monthly', component: MonthlyComponent },   { path: 'daily', component: DailyComponent },    { path: 'daily/:empId', component: AttendanceDetailsComponent },   { path: 'details/:empId', component: AttendanceDetailsComponent },   { path: 'monthly/:empId', component: AttendanceDetailsComponent },   { path: 'leaves/:empId', component: AttendanceDetailsComponent },    { path: 'details/:empId/apply-leave', component: ApplyLeaveComponent },   { path: 'daily/:empId/apply-leave', component: ApplyLeaveComponent },   { path: 'daily/:empId/attendance-logs/:ofDate', component: AttendanceLogsComponent },   { path: 'monthly/:empId/apply-leave', component: ApplyLeaveComponent },   { path: 'leaves/:empId/apply-leave', component: ApplyLeaveComponent },   { path: 'leaves/new/apply', component: ApplyLeaveComponent },    { path: 'leaves', component: LeavesComponent },   { path: 'leave-balances', component: LeaveBalancesComponent },   { path: 'leave-balances/:empId', component: AttendanceDetailsComponent },   { path: 'manage-leaves', component: ManageLeavesComponent },  ];    const emp_routes: Routes = [   { path: '', redirectTo: 'list', pathMatch: 'full' },   { path: 'list', component: EmployeeListComponent },   { path: 'list/:id', component: EmpEditComponent },   { path: 'designations', component: DesignationsComponent } ];    const page_routes: Routes = [   { path: '', redirectTo: 'attendances', pathMatch: 'full' },   { path: 'employees', component: EmployeesComponent, children: emp_routes },   { path: 'attendances', component: AttendancesComponent, children: attdendance_routes },    { path: 'settings', loadChildren: './pages/settings/settings.module#SettingsModule' }, ];  // main routes const routes: Routes = [   { path: '', redirectTo: 'pages', pathMatch: 'full' },   { path: 'login', component: LoginComponent, canActivate: [LoginGuard] },   { path: 'pages', component: PagesComponent, canActivate: [UserGuard], children: page_routes },   { path: 'loginViaOrg', component: OrgLoginComponent },   { path: 'download', component: AppDownloadComponent },   { path: '**', redirectTo: 'pages' }, ];  @NgModule({   imports: [RouterModule.forRoot(routes, { useHash: true })],   exports: [RouterModule] }) export class AppRoutingModule { } 

5.AppModule

@NgModule({    declarations: [     AppComponent,     PagesComponent,     LoginComponent,     EmployeesComponent,     OrgLoginComponent,     EmployeeListComponent,     EmpEditComponent,     DayEventDialogComponent,     AttendancesComponent,     MonthlyComponent,     AttendanceDetailsComponent,     DailyComponent,     DeviceDialogComponent,     LeaveActionDialogComponent,     LeavesComponent,     LeaveBalancesComponent,     ManageLeavesComponent,     ApplyLeaveComponent,     ConfirmDialogComponent,     ResetPasswordDialogComponent,     AppDownloadComponent,     DesignationsComponent,     AttendanceLogsComponent,   ],    entryComponents: [     DayEventDialogComponent,     DeviceDialogComponent,     LeaveActionDialogComponent,     ConfirmDialogComponent,     ResetPasswordDialogComponent   ],    imports: [     BrowserModule,     // CommonModule,     SharedModule,     AppRoutingModule,     // feature modules     // SettingsModule   ],    providers: [     LoginGuard, UserGuard,   ],    bootstrap: [AppComponent] }) export class AppModule { } 
like image 415
Er Sushil Avatar asked Aug 31 '17 07:08

Er Sushil


People also ask

What is BrowserModule?

BrowserModule provides services that are essential to launch and run a browser application. BrowserModule also re-exports CommonModule from @angular/common , which means that components in the AppModule also have access to the Angular directives every application needs, such as NgIf and NgFor .

Is BrowserModule required?

BrowserModule is required by default by any new web based angular application. It should be imported from @angular/platform-browser.

What is lazy loaded module Angular?

Lazy loading is the process of loading components, modules, or other assets of a website as they're required. Since Angular creates a SPA (Single Page Application), all of its components are loaded at once. This means that a lot of unnecessary libraries or modules might be loaded as well.

What is the common module in Angular?

CommonModulelink. Exports all the basic Angular directives and pipes, such as NgIf , NgForOf , DecimalPipe , and so on. Re-exported by BrowserModule , which is included automatically in the root AppModule when you create a new app with the CLI new command.


2 Answers

Import BrowserModule, BrowserAnimationsModule, HttpModule or HttpClientModule only once, preferably in your root module.

like image 184
Jota.Toledo Avatar answered Sep 21 '22 15:09

Jota.Toledo


I also got the same error and finally, after little bit struggle, I was able to fix it.

Import these mentioned modules only once(in app-module only):

BrowserModule, BrowserAnimationsModule, LazyLoadImageModule (if using it), CarouselModule (if using it), InfiniteScrollModule (if using it), HttpModule ( if using it)

like image 21
user9339378 Avatar answered Sep 22 '22 15:09

user9339378