typescript Angular 9如何获得先前的路线路径

u91tlkcl  于 2022-12-24  发布在  TypeScript
关注(0)|答案(3)|浏览(160)

我需要你的帮助,以获得以前的路线路径。我正在使用下面的链接来获得,但它不会在第一时间触发...
How to determine previous page URL in Angular?

constructor(router: Router) {
  router.events
  .pipe(filter(event => event instanceof NavigationEnd))
  .subscribe((event: NavigationEnd) => {
    console.log('prev:', event.previousUrl);
    this.previousUrl = event.url;
  });
}

我同时使用了RoutesRecognized和NavigationEnd,但没有得到它。
我在构造函数和ngOnInit中调用了此方法,但每次都没有在第一次触发....
有没有什么办法,我可以
谢谢你...

5fjcxozz

5fjcxozz1#

在构造函数中可以使用

this.router.getCurrentNavigation().previousNavigation.finalUrl.toString()

以获取先前的路由路径
如果您在构造函数外部使用this.router.getCurrentNavigation(),请小心,这将对生命周期来说太晚,并且您将始终具有空值

constructor(private router: Router) {
  console.log(this.router.getCurrentNavigation().previousNavigation.finalUrl.toString());
}
hgqdbh6s

hgqdbh6s2#

Router类公开了一个getCurrentNavigation()方法:

getCurrentNavigation(): Navigation|null {
  return this.currentNavigation;
}

Router.currentNavigation的类型为Navigation

private currentNavigation: Navigation|null = null;

Navigation的定义中可以看出,您可以使用previousNavigation属性访问前面的导航:

previousNavigation: Navigation | null;

因此,您可以使用此属性获取以前的路径。

更新

正如O.MeeKoh所建议的,必须从构造函数调用getCurrentNavigation()

acruukt9

acruukt93#

您可以尝试使用navigationStart解决第一次无法获取上一条路线的问题。
你可以参考下面的代码行来获得如何使用它的想法。

ngOnInit(){
    this._router.events.filter(e => e instanceof NavigationStart )
      .bufferCount(2,1).subscribe(e => {
        if(e !== null && e !== undefined) this.orginalPath = e[0]['url'].substr(1)
    });
  }

如果**pairwise()**方法能解决您的问题,您甚至可以尝试使用它。

router.events
  .pipe(
    filter(e => e instanceof NavigationEnd),
    pairwise() // check it's second route load
  )
  .subscribe((e: any[]) => {
    console.log(e);
  });

相关问题