Angular路由无法打开子页面问题咨询
Angular路由异常问题解析
一、为什么/create-bet被重定向,必须使用/home/create-bet
- 你的根路由(
app-routing.module.ts)里并没有直接定义/create-bet这个路径,它是home懒加载模块下的子路由。根路由仅包含login、home和兜底的通配符**规则。 - 当你调用
this.router.navigateByUrl('/create-bet')时,Angular从根路由开始匹配,找不到对应路径,就会触发**通配符的重定向规则,跳转到home。 - 而
/home/create-bet是完整的合法路径:根路由匹配home并加载对应的懒加载模块,之后home模块的路由匹配create-bet,因此能正常跳转。
二、子页面bet-duration-select导航异常的原因
1. 直接访问/bet-duration-select被重定向
/bet-duration-select是绝对路径,根路由中不存在该路径,同样会触发根路由的**通配符重定向到home。正确的做法是使用相对路径导航(比如在CreateBetComponent中调用this.router.navigate(['bet-duration-select'], { relativeTo: this.route })),或者使用完整的绝对路径/home/create-bet/bet-duration-select。
2. 访问完整路径仍被重定向/子组件不显示
- 重定向问题:检查
home-routing.module.ts的路由顺序,通配符规则{ path: '*', redirectTo: '' }必须放在所有路由的最后。当前你的路由顺序是create-bet→ 空路径 →*,理论上/home/create-bet/bet-duration-select应该优先匹配create-bet的子路由,不会触发*的重定向。如果问题依旧,排查下AuthGuard是否对子路由有额外的拦截逻辑。 - 子组件不显示问题:
BetDurationSelectComponent作为CreateBetComponent的子路由,必须在CreateBetComponent的模板中添加<router-outlet></router-outlet>标记。没有这个标记,Angular没有渲染子组件的容器,只会显示CreateBetComponent本身。
内容的提问来源于stack exchange,提问作者Sven
相关产品推荐
相关产品推荐

