如何在Angle 8中的NavigationStart事件上获取路由器路径
this.router.events
.pipe(filter(event => event instanceof NavigationStart))
.subscribe((event: NavigationStart) => {
// how to get router path of on going navigation
});
我可以使用event.url,但是我的应用程序中有一些命名出口,URL由打开的命名出口混合而成。因此希望在NavigationStart上找到正在进行的导航的路由器路径。
答案 0 :(得分:0)
使用ActivatedRoute而不是Router
您可以订阅url
并加入细分受众群,也可以使用snapshot
。
这里有充分的记录。
答案 1 :(得分:0)
同时注入Router
和ActivatedRoute
服务。
导航开始时,遍历激活的路线以找到出口。
您可以使用以下代码作为起点。
this.router.events
.pipe(
filter(event => event instanceof NavigationStart),
map(() => this.activatedRoute),
map(activatedRoute => {
while (activatedRoute.firstChild !== null) {
activatedRoute = activatedRoute.firstChild
}
return activatedRoute
}),
filter(activatedRoute => activatedRoute.outlet === "primary"),
mergeMap(activatedRoute => activatedRoute.url),
)
注意:即使您在根组件中编写此代码,该代码也将起作用。激活的路径不仅表示注入它的特定组件的路径。激活的路线代表通向当前路线的整个路线树。
在您的根组件激活路由中,是对激活该组件的路由的引用,即“ /”。但是,您可以沿着路线树向下浏览以访问其他路线(如果有)。
类似地,在其他组件中,激活的路由是对激活该组件的路由的引用。但是您可以上下移动以访问其他路线。