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

Angular 16页面刷新检测:原Angular 12代码失效求修改方案

Angular 16 路由事件监听修改建议

你的代码在Angular 16中失效的核心原因是:页面刷新时NavigationEnd事件的id不再固定为1。Angular 14之后调整了路由初始化逻辑,id变为递增的导航序号,每次导航都会累加,原来依赖event.id === 1的判断条件不再成立,导致updateDetails()无法触发。

以下是两种可行的修改方案:

方案1:移除event.id === 1的判断

只保留event.url === event.urlAfterRedirects的判断即可——页面刷新时不存在路由重定向,这两个值必然相等,同时后续正常路由导航如果没有重定向也会触发该逻辑,完全覆盖你的需求:

this._router.events
  .pipe(filter((rs): rs is NavigationEnd => rs instanceof NavigationEnd))
  .subscribe(event => {
    if (event.url === event.urlAfterRedirects) {
      this.updateDetails();
    }
  });

方案2:组件初始化时直接调用(更稳妥)

页面刷新时组件会重新初始化,ngOnInit钩子会执行,直接在这里调用一次updateDetails(),再监听路由变化处理后续的导航场景,逻辑更清晰:

ngOnInit() {
  // 页面刷新/首次加载时立即执行
  this.updateDetails();

  // 监听后续路由导航,按需执行更新逻辑
  this._router.events
    .pipe(filter((rs): rs is NavigationEnd => rs instanceof NavigationEnd))
    .subscribe(event => {
      this.updateDetails();
    });
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 07:10:07