路由器出口之外的组件,在通过防护重定向路由器后,其window.location.href没有更新吗?

问题描述 投票:1回答:1

我有一个位于路由器外部的导航组件,它利用了一个可重复使用的图标组件,该组件依赖于绝对URL指向SVG图标,该图标通过该组件内的getter进行检索:

public get absUrl(): string {
    return window.location.href.split('#')[0];
  }

不幸的是,重定向后,视图未使用新的Abs网址进行更新。

我已经使用setTimeout进行了变通,但是它的超级技巧-纯粹是为了证明链中存在一些延迟,这会导致问题,最终window.location.href的值是正确的。

这是解决方法:

public absUrl = window.location.href.split('#')[0];

  ngAfterViewInit() {
    setTimeout(() => {
      this.absUrl = window.location.href.split('#')[0];
      this.ref.detectChanges();
    }, 200);
  }
  • 仅当在受保护的路由上加载整个应用程序时,尝试在加载应用程序后随后访问受保护的路由会正常工作。
  • 当以不存在的路径加载整个应用程序并重定向到/ 404时,会发生这种情况>
  • 如果我设置0-100ms超时,它将不会及时更新
  • 通过路由器出口加载的组件有效,图标中的abs网址已正确更新。
  • 有人对如何正确实施这一想法有任何想法吗?我的直觉是,如果您要加载受保护的路由,则与第一次加载应用程序有关。

我有一个位于路由器外部的导航组件,它利用了可重复使用的图标组件,该组件依赖于绝对URL指向SVG图标,该图标通过getter检索...

angular angular-router angular-changedetection virtual-dom
1个回答
1
投票

我想您可以使用Location服务执行以下操作:

© www.soinside.com 2019 - 2024. All rights reserved.