You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Angular 12路由编码异常:路由未按预期工作

Angular 9升级到12后路由跳转路径被编码为%23的解决方案

以下是针对路由跳转异常问题的排查和解决方向:

1. 检查base href配置

打开项目根目录下的index.html,确认<base>标签的href属性是否正确设置为根路径:

<base href="/">

如果base href被错误设置为/#或其他包含哈希的路径,会导致Angular在处理路由时错误编码#符号。

2. 验证路由模式配置

查看AppRoutingModule中RouterModule.forRoot的配置:

@NgModule({
  imports: [RouterModule.forRoot(routes, { useHash: true })], // 若使用哈希模式
  exports: [RouterModule]
})
export class AppRoutingModule { }
  • 若使用哈希模式(useHash: true),routerLink无需手动添加/#,Angular会自动拼接哈希前缀,你当前的routerLink="/app-terminal-request-list"写法是正确的。
  • 若使用路径模式(默认无useHash配置),需确保服务器已配置HTML5模式的路由重写,但这一般不会导致跳转时编码#的问题。

3. 排查自定义URL序列化器

如果项目中自定义了UrlSerializer处理URL,升级到Angular 12后可能存在兼容性问题。检查自定义序列化器的实现,确保它正确处理URL中的哈希部分,避免错误编码#:

@Injectable()
export class CustomUrlSerializer implements UrlSerializer {
  private defaultSerializer: UrlSerializer = new DefaultUrlSerializer();

  parse(url: string): UrlTree {
    // 确保此处未错误编码#
    return this.defaultSerializer.parse(url);
  }

  serialize(tree: UrlTree): string {
    // 确保序列化时正确处理哈希
    return this.defaultSerializer.serialize(tree);
  }
}

若自定义序列化器存在问题,可暂时移除它,测试路由是否恢复正常。

4. 检查第三方指令的干扰

你代码中的<li>标签使用了[hasAccess]自定义指令,该指令可能在DOM操作或事件处理中干扰routerLink的正常行为。尝试暂时移除[hasAccess]指令,测试点击跳转是否正常,以排除该指令的影响。

5. 确认依赖版本一致性

确保项目中所有Angular相关依赖(尤其是@angular/router)都已升级到12.x版本,避免版本不一致导致的路由行为异常。可通过package.json检查版本,或运行npm list @angular/router确认。

内容的提问来源于stack exchange,提问作者monstertjie_za

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 12:27:19