2

我有以下路线配置:

{ 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 页面,但是,以下内容返回给我:

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

但我希望获得真正的先前路线 ( home/xxx),而不是我在按钮中设置的 URL。有没有办法做到这一点?

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;
    });
  }
  ...
}
4

1 回答 1

0

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

  1. 你在/home/xxx
  2. 您导航到/home/unknown
  3. 路由器注意到你在一个应该被重定向到的路径上/404,所以它这样做了。
  4. 你在/404并且你检查之前的 URL 是/home/unknown.

我可以想到两种解决方法:

  1. 而不是重定向**/404,只需将 404 组件设置为**路由器中的路径。您将继续/home/unknown使用 404 组件。
  2. 实现您自己的服务来跟踪您的应用程序中访问的 url。例如,您可以Location从 订阅服务@angular/router,并跟踪访问的 URL。
于 2017-07-16T12:50:08.040 回答