Angular配置路由懒加载时报'router-outlet'不是已知元素错误
router-outlet is not a known element 报错和你写的懒加载路由逻辑无关,核心原因是使用<router-outlet>标签的组件所属模块,没有正确导入包含RouterOutlet指令的RouterModule。
你当前的路由配置本身没有逻辑错误,按以下步骤排查模块导入问题即可修复:
1. 检查根模块AppModule配置
确认app.module.ts的imports数组中已经引入了AppRoutingModule。AppRoutingModule中已经导出了RouterModule,只有在根模块导入它,根组件app.component.html里的<router-outlet>才能被Angular识别。
参考正确配置:
// app.module.ts import { NgModule } from '@angular/core'; import { BrowserModule } from '@angular/platform-browser'; import { AppRoutingModule } from './app-routing.module'; import { AppComponent } from './app.component'; @NgModule({ declarations: [AppComponent], imports: [ BrowserModule, AppRoutingModule // 不可遗漏 ], bootstrap: [AppComponent] }) export class AppModule { }
2. 检查LandingModule配置
确认landing.module.ts的imports数组中已经引入了LandingRoutingModule。LandingRoutingModule通过forChild注册子路由后也导出了RouterModule,只有导入该模块,landing.component.html中放置的<router-outlet>才能正常渲染子路由。
参考正确配置:
// landing.module.ts import { NgModule } from '@angular/core'; import { CommonModule } from '@angular/common'; import { LandingRoutingModule } from './landing-routing.module'; import { LandingComponent } from './landing.component'; @NgModule({ declarations: [LandingComponent], imports: [ CommonModule, LandingRoutingModule // 不可遗漏 ] }) export class LandingModule { }
3. 检查两个懒加载子模块配置
确认UserModule、AdminModule的imports数组中,都引入了各自对应的路由模块(如UserRoutingModule、AdminRoutingModule),且这两个路由模块都保持和LandingRoutingModule一致的写法:imports数组写RouterModule.forChild(路由配置),exports数组导出RouterModule,避免子模块内用到路由相关指令时报错。
- 所有模块类都要放在
@NgModule的imports数组中,不要误放到declarations数组里,declarations只能用来声明当前模块拥有的组件、指令、管道。 - 不要重复在多个模块中声明Router相关指令,只要导入对应模块导出的RouterModule即可使用所有路由指令。
内容的提问来源于stack exchange,提问作者SPARSH KUMAR

