也许所有其他答案都是针对角度2.X。
现在它不适用于Angular5.X。我正在使用它。
仅使用NavigationEnd,就无法获取以前的URL。
因为路由器的工作方式是从“ NavigationStart”,“ RoutesRecognized”等到“ NavigationEnd”。
您可以检查
router.events.forEach((event) => {
console.log(event);
});
但是,即使使用“ NavigationStart”,您仍然无法获得以前的URL。
现在您需要成对使用。
import 'rxjs/add/operator/filter';
import 'rxjs/add/operator/pairwise';
constructor(private router: Router) {
this.router.events
.filter(e => e instanceof RoutesRecognized)
.pairwise()
.subscribe((event: any[]) => {
console.log(event[0].urlAfterRedirects);
});
}
使用成对,您可以查看URL的来源和来源。
“ RoutesRecognized”是从原始网址到目标网址的更改步骤。
因此,对其进行过滤并从中获取以前的网址。
最后但并非最不重要的,
将此代码放在父组件或更高版本中(例如,app.component.ts)
因为此代码会在完成路由后触发。
更新角度6+
的events.filter
,因为过滤器是不活动的一部分,因此修改代码,使错误
import { filter, pairwise } from 'rxjs/operators';
this.router.events
.pipe(filter((evt: any) => evt instanceof RoutesRecognized), pairwise())
.subscribe((events: RoutesRecognized[]) => {
console.log('previous url', events[0].urlAfterRedirects);
console.log('current url', events[1].urlAfterRedirects);
});