Angular路由报错NG04002:无法匹配路由'student'求助
Angular路由匹配错误NG04002排查与解决
点击页面上的Student和Student Details路由链接时,控制台抛出以下错误:
Uncaught (in promise): Error: NG04002: Cannot match any routes. URL Segment: 'student'
Error: NG04002: Cannot match any routes. URL Segment: 'student'
项目相关代码
app-routing.module.ts
import { Component, NgModule } from '@angular/core'; import { CommonModule } from '@angular/common'; import { Routes ,RouterModule} from '@angular/router'; import { StudentComponent } from './student/student.component'; import { StudentdetailComponent } from './studentdetail/studentdetail.component'; const routes:Routes=[ { path:'student',component:StudentComponent }, { path:'studentdetail',component:StudentdetailComponent } ]; @NgModule({ declarations: [], imports: [ CommonModule ] }) export class AppRoutingModule { }
student.component.html
<p>student works!</p>
studentdetail.component.html
<p>studentdetail works!</p>
test.component.html
<a [routerLink] =["/student"]>Student</a><br/> <a [routerLink] =["/studentdetail"]>Student Details</a><br/> <div> <router-outlet></router-outlet> </div>
appmodule.ts
import { NgModule } from '@angular/core'; import { BrowserModule } from '@angular/platform-browser'; import { AppComponent } from './app.component'; import {Test} from './test.component'; import { TopComponent } from './top/top.component'; import { AppRoutingModule } from './app-routing.module'; import { StudentComponent } from './student/student.component'; import { StudentdetailComponent } from './studentdetail/studentdetail.component'; import { RouterModule } from '@angular/router'; @NgModule({ declarations: [ AppComponent, Test, TopComponent, StudentComponent, StudentdetailComponent ], imports: [ BrowserModule, AppRoutingModule, RouterModule.forRoot([]) ], providers: [], bootstrap: [Test] }) export class AppModule { }
错误原因
- 路由配置未注册:
app-routing.module.ts中定义了routes数组,但未在@NgModule的imports中通过RouterModule.forRoot(routes)注册路由规则,导致Angular无法识别这些路由。 - 重复导入RouterModule:
AppModule中同时导入AppRoutingModule和RouterModule.forRoot([]),后者传入空数组会覆盖路由配置,进一步导致路由规则失效。
解决方案
步骤1:修复AppRoutingModule
修改app-routing.module.ts,注册路由配置并导出RouterModule:
import { NgModule } from '@angular/core'; import { CommonModule } from '@angular/common'; import { Routes, RouterModule } from '@angular/router'; import { StudentComponent } from './student/student.component'; import { StudentdetailComponent } from './studentdetail/studentdetail.component'; const routes: Routes = [ { path: 'student', component: StudentComponent }, { path: 'studentdetail', component: StudentdetailComponent } ]; @NgModule({ declarations: [], imports: [ CommonModule, RouterModule.forRoot(routes) // 注册路由配置 ], exports: [RouterModule] // 导出RouterModule,供其他模块使用路由指令 }) export class AppRoutingModule { }
步骤2:修复AppModule
移除AppModule中重复的RouterModule.forRoot([])导入:
import { NgModule } from '@angular/core'; import { BrowserModule } from '@angular/platform-browser'; import { AppComponent } from './app.component'; import { Test } from './test.component'; import { TopComponent } from './top/top.component'; import { AppRoutingModule } from './app-routing.module'; import { StudentComponent } from './student/student.component'; import { StudentdetailComponent } from './studentdetail/studentdetail.component'; @NgModule({ declarations: [ AppComponent, Test, TopComponent, StudentComponent, StudentdetailComponent ], imports: [ BrowserModule, AppRoutingModule // 仅导入配置好的路由模块 ], providers: [], bootstrap: [Test] }) export class AppModule { }
验证
修改完成后重启项目,点击路由链接,控制台不再报错,对应组件内容会正常渲染在<router-outlet>区域。
内容的提问来源于stack exchange,提问作者Rahul Aggarwal
相关产品推荐
相关产品推荐

