#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