在路由器事件中获取正确的URL

时间:2017-07-16 04:26:43

标签: angular angular-routing angular2-router

我有以下路线配置:

{ loadChildren: './public#PublicModule', path: '' },
{ loadChildren: './home#HomeModule', path: 'home' },
{ path: '**', redirectTo: '/404' }

在某个模板中(如果重要,我们称之为 xxx.component.html )我创建了一个按钮,在404路线中进行了一些测试:

<button type="button" routerLink="unknown">Click here for unknown</button>

有了这个,我在路线home/xxx,按下按钮后,它可以工作,我的意思是它转到404页面,然而,以下内容为我返回:< / p>

NavigationEnd {id: 2, url: "/home/unknown", urlAfterRedirects: "/404"}

但我希望得到 REAL 之前的路线(home/xxx),而不是我在按钮中设置的网址。有没有办法实现这个目标?

PS1:我尝试使用pairwise,但只有在拨打404路线2次后才有效。

我的404组件如下:

export class NotFoundErrorComponent {

  public previousUrl: string;

  constructor(
    private router: Router
  ) {
    this.router.events
    .filter((event: any) => event instanceof NavigationEnd)
    .subscribe((event: any) => {
      console.log(event);
      // this.previousUrl = event.url;
    });
  }
  ...
}

1 个答案:

答案 0 :(得分:0)

这是一步一步发生的事情:

  1. 您在/home/xxx
  2. 导航至/home/unknown
  3. 路由器注意到您位于应该重定向到/404的路径上,因此它会这样做。
  4. 您在/404并且检查了之前的网址/home/unknown
  5. 我可以想出两种方法可以解决这个问题:

    1. 只需将404组件设置为路由器中的路径**,而不是将/404重定向到**。您将使用404组件留在/home/unknown
    2. 实施您自己的服务,跟踪您的应用中访问过的网址。例如,您可以从Location订阅@angular/router服务,并跟踪访问过的网址。