简体   繁体   中英

How to solve "BrowserModule has already been loaded." on Angular

I have this 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." on my Angular web app. I try to solve it with in importing CommonModule on each child modules, and import only once BrowserModule and BrowserAnimationsModule on app.module.ts. I have three modules : one parent AppModule :

import { NgModule } from '@angular/core';
import { AppRoutingModule } from './app-routing.module';
import { AppComponent } from './app.component';
import {HTTP_INTERCEPTORS, HttpClientModule} from '@angular/common/http';
import {FormsModule, ReactiveFormsModule} from '@angular/forms';
import { LoginComponent } from './components/login/login.component';
import {AuthGuard} from './guards/auth.guard';
import {AuthenticationService} from './services/authentication.service';
import { NavbarComponent } from './components/navbar/navbar.component';
import {AdminGuard} from './guards/admin.guard';
import {AppInterceptor} from './interceptors/app.interceptor';
import {FaIconLibrary, FontAwesomeModule} from '@fortawesome/angular-fontawesome';
import {BrowserAnimationsModule} from '@angular/platform-browser/animations';
import {
  faArrowAltCircleDown,
  faArrowDown,
  faArrowRight,
  faArrowUp,
  faCheck,
  faEdit,
  faExchangeAlt, faExclamationCircle, faFileAlt, faHome, faInfo,
  faKey,
  faLock,
  faLockOpen,
  faPlus,
  faSearch,
  faSearchDollar, faSignOutAlt,
  faSort,
  faSortAlphaDown,
  faSortAlphaDownAlt,
  faSortAlphaUp,
  faSortNumericDown,
  faSortNumericDownAlt,
  faSortNumericUp,
  faSyncAlt,
  faTimes,
  faTrash, faUserEdit
} from '@fortawesome/free-solid-svg-icons';
import {BrowserModule} from '@angular/platform-browser';

@NgModule({
  declarations: [
    AppComponent,
    LoginComponent,
    NavbarComponent
  ],
  imports: [
    BrowserModule,
    BrowserAnimationsModule,
    HttpClientModule,
    FormsModule,
    ReactiveFormsModule,
    FontAwesomeModule,
    AppRoutingModule,
  ],
  providers: [AuthGuard, AuthenticationService, AdminGuard, {
    provide: HTTP_INTERCEPTORS,
    useClass: AppInterceptor,
    multi: true
  }],
  exports: [
    NavbarComponent
  ],
  bootstrap: [AppComponent]
})
export class AppModule {
  constructor(library: FaIconLibrary) {
    library.addIcons(
      faKey,
      faTrash,
      faLock,
      faLockOpen,
      faSyncAlt,
      faTimes,
      faExchangeAlt,
      faSearch,
      faPlus,
      faArrowRight,
      faCheck,
      faArrowDown,
      faArrowUp,
      faSort,
      faSortAlphaDown,
      faSortNumericDown,
      faSortAlphaUp,
      faSortNumericUp,
      faSortAlphaDownAlt,
      faSortNumericDownAlt,
      faEdit,
      faSearchDollar,
      faFileAlt,
      faHome,
      faUserEdit,
      faSignOutAlt,
      faArrowAltCircleDown,
      faExclamationCircle,
      faInfo
    )
  }
}

And two childs : LoggedAppModule :

import { NgModule} from '@angular/core';
import {FontAwesomeModule} from "@fortawesome/angular-fontawesome";
import {FormsModule, ReactiveFormsModule} from '@angular/forms';
import {MatSelectModule} from '@angular/material/select';
import {MatPaginatorModule} from '@angular/material/paginator';
import {MatTooltipModule} from '@angular/material/tooltip';
import {NgxPaginationModule} from 'ngx-pagination';
import {NgbModule} from '@ng-bootstrap/ng-bootstrap';
import {NgMultiSelectDropDownModule} from 'ng-multiselect-dropdown';
import {CompetitorsComponent} from './components/competitors/competitors.component';
import {LoaderComponent} from './components/loader/loader.component';
import {EditPasswordComponent} from './components/edit-password/edit-password.component';
import {CompanyComponent} from './components/company/company.component';
import {LayoutComponent} from './components/layout/layout.component';
import {EditWcKeysComponent} from './components/company/edit-wc-keys/edit-wc-keys.component';
import {CompetitorComponent} from './components/competitor/competitor.component';
import {SafePipe} from './pipe/safe.pipe';
import {ProductsComparisonComponent} from './components/products-comparison/products-comparison.component';
import {ProductComponent} from './components/products/product/product.component';
import {AddCompetitorProductComponent} from './components/add-competitor-product/add-competitor-product.component';
import {BreadcrumbComponent} from './components/breadcrumb/breadcrumb.component';
import {CapitalizePipe} from './pipe/capitalize.pipe';
import {EditPathPriceComponent} from './components/company/edit-path-price/edit-path-price.component';
import {NgbdSortableHeader} from './directives/ngbd-sortable-header';
import {PriceProductHistoryComponent} from './components/partial/price-product-history/price-product-history.component';
import {SettingsComponent} from './components/settings/settings.component';
import {EditPasswordModalComponent} from './components/modal/edit-password-modal/edit-password-modal.component';
import {EditSearchProductCompetitorModalComponent} from './components/modal/edit-search-product-competitor-modal/edit-search-product-competitor-modal.component';
import {HomeComponent} from './components/home/home.component';
import {AppModule} from './app.module';
import {LoggedAppRoutingModule} from './logged-app-routing.module';
import {CommonModule} from '@angular/common';

@NgModule({
    declarations: [
      CompetitorsComponent,
      LoaderComponent,
      EditPasswordComponent,
      CompanyComponent,
      LayoutComponent,
      EditWcKeysComponent,
      CompetitorComponent,
      SafePipe,
      ProductsComparisonComponent,
      ProductComponent,
      AddCompetitorProductComponent,
      BreadcrumbComponent,
      CapitalizePipe,
      EditPathPriceComponent,
      NgbdSortableHeader,
      PriceProductHistoryComponent,
      SettingsComponent,
      EditPasswordModalComponent,
      EditSearchProductCompetitorModalComponent,
      HomeComponent
    ],
  imports: [
    CommonModule,
    AppModule,
    FormsModule,
    ReactiveFormsModule,
    MatSelectModule,
    MatPaginatorModule,
    MatTooltipModule,
    NgxPaginationModule,
    FontAwesomeModule,
    NgbModule,
    NgMultiSelectDropDownModule.forRoot(),
    LoggedAppRoutingModule,
  ],
  exports: [
    LoaderComponent,
    BreadcrumbComponent
  ],
  providers: [
  ]
})
export class LoggedAppModule {
}

AdminModule :

import { NgModule } from '@angular/core';
import {AdminComponent} from "./admin.component";
import {LayoutAdminComponent} from "./layout/layout.admin.component";
import {AdminRoutingModule} from "./admin-routing.module";
import {CompaniesComponent} from './companies/companies.component';
import {AddCompanyComponent} from './add-company/add-company.component';
import {ProductsComponent} from '../products/products.component';
import {LoggedAppModule} from '../../logged-app.module';
import {AdminGuard} from '../../guards/admin.guard';
import {FormsModule, ReactiveFormsModule} from '@angular/forms';
import {MatTooltipModule} from '@angular/material/tooltip';
import {NgxPaginationModule} from 'ngx-pagination';
import {FontAwesomeModule} from '@fortawesome/angular-fontawesome';
import {NavbarAdminComponent} from './navbar/navbar.admin.component';
import {CommonModule} from '@angular/common';


@NgModule({
  declarations: [
    AdminComponent,
    LayoutAdminComponent,
    CompaniesComponent,
    AddCompanyComponent,
    ProductsComponent,
    NavbarAdminComponent,
  ],
    imports: [
        CommonModule,
        LoggedAppModule,
        FontAwesomeModule,
        NgxPaginationModule,
        MatTooltipModule,
        FormsModule,
        ReactiveFormsModule,
        AdminRoutingModule,
    ],
  providers: [
    AdminGuard
  ]
})
export class AdminModule { }

I don't find any solution. Please help me

The problem is happening because you are importing the "AppModule" from your child module "LoggedAppModule"

In your app, nothing should import the App module (assuming this is the root module of your app).

The child modules (lazzy-loaded or not) should import the CommonModule (which shares the AppModule imports to the child modules).

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM