javascript 我怎样才能把以前的路线作为Angular中的路径?

9nvpjoqh  于 2023-03-11  发布在  Java
关注(0)|答案(3)|浏览(138)

我怎样才能把以前的路线作为Angular中的路径?
我尝试通过this link使用一个解决方案,但它不会在第一页加载时执行。

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

我使用了RoutesRecognizedNavigationEnd,但是它们不起作用。
我在constructorngOnInit中调用了这个方法,但是它们都没有在第一次页面加载时执行。
有什么方法可以获得以前的URL吗?
谢谢你。

r8uurelv

r8uurelv1#

在构造函数中可以使用

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

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

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

vc9ivgsu2#

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

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

Router.currentNavigation的类型为Navigation

private currentNavigation: Navigation|null = null;

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

previousNavigation: Navigation | null;

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

更新

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

dffbzjpn

dffbzjpn3#

您可以尝试使用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);
  });

相关问题