RouterModule.forRoot调用了两次延迟加载的模块应改用RouterModule.forChild

问题描述

我正在延迟加载的模块中导入AppModule,这会产生错误错误:未捕获(承诺):错误:RouterModule.forRoot()被调用了两次。延迟加载的模块应改用RouterModule.forChild()。

应用程序模块

import { browserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { AppComponent } from './app.component';
import { AppRoutingModule } from './app-routing.module';
import { NgClockPickerlibmodule } from 'ng-clock-picker-lib';
import { SharedDataService } from './services/shared-data.service';


@NgModule({
  declarations: [
    AppComponent,...
  ],imports: [
    browserModule,NgClockPickerlibmodule,providers: [
    SharedDataService,exports: [
    NgClockPickerlibmodule
  ],bootstrap: [AppComponent]
})
export class AppModule { }

应用程序路由模块

import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { RouterModule,Routes } from '@angular/router';

const routes: Routes = [
  { path: 'journalling',loadChildren: './Journalling/modules/journalling.module#JournallingModule' }
];

@NgModule({
  imports: [
    CommonModule,RouterModule.forRoot(routes)
  ],declarations: [

  ],exports: [RouterModule]
})
export class AppRoutingModule { }

新闻发布模块

import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { JournallingRoutingModule } from './journalling-routing.module';
import { AppModule } from 'src/app/app.module';


@NgModule({
  imports: [
    CommonModule,JournallingRoutingModule,AppModule
  ],declarations: [ 
  ],providers: [
  ]
})
export class JournallingModule { }

新闻发布路由模块

import { NgModule } from '@angular/core';
import { Routes,RouterModule } from '@angular/router';

const routes: Routes = [  
];

@NgModule({
  imports: [RouterModule.forChild(routes)],exports: [RouterModule]
})
export class JournallingRoutingModule { }

[错误RouterModule.forRoot()被调用了两次。延迟加载的模块应改用forChild()。] [1] [1]:https://i.stack.imgur.com/yMDry.png

解决方法

新闻发布模块

import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { JournallingRoutingModule } from './journalling-routing.module';
import { AppModule } from 'src/app/app.module'; <--- remove this import

@NgModule({
  imports: [
    CommonModule,JournallingRoutingModule,AppModule // <--- remove this import
  ],declarations: [ 
  ],providers: [
  ]
})
export class JournallingModule { }

问题是您在JournallingModule中导入AppModule,这导致RouterModule.forRoot()被调用两次。 AppModule是您的根模块,不应导入子模块中。