在Angular中,我如何将先前的路由作为路径获取?
在Angular中,我如何将先前的路由作为路径获取?
在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
,但它们都没有起作用。
我在constructor
和ngOnInit
中调用了这个方法,但它们都没有在第一次页面加载时执行。
有没有办法获取前一个URL?
谢谢。
如何在Angular中获取前一个路由作为路径?
在Angular中,有时候我们需要获取前一个路由的路径。下面是一种获取前一个路由路径的方法:
在构造函数中,可以使用以下代码获取前一个路由的路径:
this.router.getCurrentNavigation().previousNavigation.finalUrl.toString()
需要注意的是,如果在构造函数之外使用this.router.getCurrentNavigation()
,那么在生命周期之后,它将无法获取到正确的值,始终为null。
以下是一个示例,展示了如何在构造函数中使用上述代码获取前一个路由的路径:
constructor(private router: Router) { console.log(this.router.getCurrentNavigation().previousNavigation.finalUrl.toString()); }
问题的原因是无法获取第一次导航之前的路由。解决方法是使用navigationStart来解决这个问题,并且可以尝试使用pairwise()方法。
首先,在ngOnInit()方法中,使用_router.events过滤出NavigationStart事件,并使用bufferCount(2,1)方法进行缓冲,然后订阅这个事件并获取url的值,将其赋给orginalPath变量。代码如下:
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); });
感谢Shah的回复,但是尝试了这部分代码后发现并没有起作用。
问题出现的原因是想要获取在Angular中的前一个路径。解决方法是使用Router
类的getCurrentNavigation()
方法来获取前一个导航,然后通过previousNavigation
属性来获取前一个路径。需要注意的是,getCurrentNavigation()
方法必须在构造函数中调用。
以下是解决方法的代码示例:
import { Component, OnInit } from '@angular/core'; import { Router, Navigation } from '@angular/router'; @Component({ selector: 'app-example', templateUrl: './example.component.html', styleUrls: ['./example.component.css'] }) export class ExampleComponent implements OnInit { previousPath: string | null; constructor(private router: Router) { } ngOnInit(): void { const currentNavigation = this.router.getCurrentNavigation(); if (currentNavigation) { this.previousPath = currentNavigation.previousNavigation?.finalUrl.toString(); } } }
请注意,上述代码需要在Angular 15版本下运行。