Angular RouterLink点击返回404问题求助(刚接触RouterModule)
排查Angular Router点击链接404的常见方向
别急,刚上手Angular路由踩坑太正常了!我帮你梳理几个最容易出问题的排查点,一步步来定位:
1. 检查路由配置的核心规则
- 子模块路由要用
forChild:你的UserModule里的路由必须用RouterModule.forChild(),而不是forRoot()(forRoot只能在根模块用一次),还要记得导出RouterModule让根模块识别:// user-routing.module.ts const authRoutes: Routes = [ { path: 'login', component: LoginComponent }, { path: 'register', component: RegisterComponent } ]; @NgModule({ imports: [RouterModule.forChild(authRoutes)], exports: [RouterModule] // 这步很关键,别漏! }) export class UserRoutingModule { } - 根路由的挂载与顺序:如果是懒加载
UserModule,根路由要这样配置,而且通配符路由**必须放在最后,不然会优先匹配所有路径导致404:
如果不是懒加载,那要确保// app-routing.module.ts const appRoutes: Routes = [ // 懒加载UserModule,挂载在/auth路径下 { path: 'auth', loadChildren: () => import('./user/user.module').then(m => m.UserModule) }, // EntryModule的路由配置同理 { path: 'app', loadChildren: () => import('./entry/entry.module').then(m => m.EntryModule) }, // 默认跳转(可选) { path: '', redirectTo: '/auth/login', pathMatch: 'full' }, // 404页面,必须放在最后! { path: '**', component: PageNotFoundComponent } ]; @NgModule({ imports: [RouterModule.forRoot(appRoutes)], exports: [RouterModule] }) export class AppRoutingModule { }UserModule已经导入到AppModule的imports数组里。
2. 确认模板里的routerLink写法正确
你在AppComponent里的按钮链接必须和路由配置的路径完全对应:
- 如果
UserModule挂载在/auth下,链接要写:<button routerLink="/auth/login">登录</button> <button routerLink="/auth/register">注册</button> - 如果是直接导入
UserModule(无挂载前缀),那链接就是/login和/register。 - 另外,根组件模板里必须有
<router-outlet></router-outlet>!这是路由组件的渲染出口,没有的话路由根本无法生效,甚至会出现URL变化但页面无反应、返回404的情况。
3. 检查模块导入顺序
确保AppModule里的导入顺序没问题:
- 如果用了路由模块(
AppRoutingModule),要确保它在imports数组里; - 如果不是懒加载
UserModule,要把UserModule也加到AppModule的imports里; - 懒加载的话,就不需要在
AppModule里导入UserModule,只靠路由的loadChildren加载即可。
4. 启用路由调试看日志
如果上面的都检查了还是有问题,打开路由调试功能,看控制台的日志就能清楚看到路由匹配的全过程:
在根路由配置里加enableTracing: true:
RouterModule.forRoot(appRoutes, { enableTracing: true })
然后点击登录/注册按钮,看浏览器控制台的日志,就能知道路由是怎么查找匹配的,是找不到对应的路由条目,还是模块加载失败,一目了然。
内容的提问来源于stack exchange,提问作者The Fox
相关产品推荐
相关产品推荐

