RouterModule.forRoot() вызывается дважды. Лениво загруженные модули должны использовать RouterModule.forChild() вместо

#angular #module #lazy-evaluation #angular-router

#angular #модуль #ленивая оценка #angular-router

Вопрос:

Я импортирую 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

Ответ №1:

модуль журналирования

 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 { }
  

Проблема в том, что вы импортируете AppModule в свой journalingmodule, что приводит к повторному вызову RouterModule.forRoot() . AppModule является вашим корневым модулем и не должен импортироваться в дочерние модули.

Комментарии:

1. Мне нужно импортировать AppModule bcz из NgClockPickerLibModule, который экспортируется в AppModule, чтобы использовать этот модуль в journalingmodule, я импортировал AppModule в journalingmodule. И NgClock-Module не может быть напрямую импортирован в JournalligModule, поскольку он импортирует BrowserAnimationsModule внутренне, и если я это сделаю, я получу сообщение об ошибке: «browsermodule уже загружен» . Поэтому я импортировал NgClock-модуль в AppModule вместе с BrowserModule и экспортировал этот NgClock-модуль из AppModule и импортировал AppModule в journalingmodule для доступа к NgClock-модулю в journalingmodule.

2. Вы можете удалить BrowserModule из импорта в app.module.ts, в дополнение к тому, что я указал в своем ответе, поскольку BrowserAnimationsModule импортирует BrowserModule.

3. если я удаляю AppModule из journalingmodule и BrowserModule из AppModule, то я получаю эту ошибку: Неперехваченная ошибка: ошибки синтаксического анализа шаблона: не удается привязать к ‘ngClass’, поскольку это неизвестное свойство ‘div’.

4. Кроме того, если я просто не импортирую AppModule в journalingmodule, то NgClockPickerLibModule недоступен для компонентов внутри journalingmodule