Angular 5懒加载报错:RouterModule.forRoot()被调用两次求助
RouterModule.forRoot() called twice的错误 嘿,我来帮你搞定这个问题!错误提示已经说得很明确——整个应用里RouterModule.forRoot()被调用了两次,但你只应该在根路由模块(也就是你的AppRoutingModule)里调用一次,懒加载模块的路由必须用forChild()。
从你贴的代码来看,AppRoutingModule和AdminRoutingModule的写法都是正确的,那问题大概率出在你懒加载的AdminProfileModule本身上,我帮你梳理几个排查和修复的关键点:
核心排查方向
你需要检查AdminProfileModule的代码,因为它是被懒加载的模块,很可能犯了以下两个错误之一:
1. 不小心导入了AppRoutingModule
如果AdminProfileModule的imports数组里包含了AppRoutingModule,那相当于把根路由模块的代码又执行了一遍,自然会触发forRoot()被重复调用的错误。
修复方式:确保AdminProfileModule的imports里只有CommonModule和你自己写的AdminRoutingModule,绝对不能导入AppRoutingModule。正确的AdminProfileModule结构应该是这样的:
import { NgModule } from '@angular/core'; import { CommonModule } from '@angular/common'; // 只导入子路由模块,不要碰根路由模块 import { AdminRoutingModule } from './admin-routing.module'; import { OrdersTabComponent } from '../../components/tabs/orders-tab/orders-tab.component'; @NgModule({ declarations: [OrdersTabComponent], imports: [ CommonModule, AdminRoutingModule // 这里用的是forChild的路由模块,完全没问题 ] }) export class AdminProfileModule { }
2. 在AdminProfileModule里直接调用了RouterModule.forRoot()
如果你的AdminProfileModule没有用AdminRoutingModule,而是自己直接在imports里写了RouterModule.forRoot(...),那也会导致重复调用的错误。
修复方式:把懒加载模块的路由配置单独抽到AdminRoutingModule里(就像你已经做的那样),然后在AdminProfileModule里只导入这个子路由模块即可。
额外注意点
- 整个应用里只能有一个地方调用
RouterModule.forRoot(),就是根路由模块AppRoutingModule,所有其他路由模块(包括懒加载模块的路由)都必须用RouterModule.forChild()。 - 如果你还有其他懒加载模块,也要用同样的逻辑检查它们的模块结构,避免犯同样的错误。
内容的提问来源于stack exchange,提问作者Egor Zvuzdetskyi

