我有一个子组件,希望访问当前的路由器URL,我可以在登录时将其用于重定向。
我的构造函数如下:
constructor(private router: Router) {
router.events.subscribe((e:any) =>
{
if(e.url)
{
this.url = e.url;
}
});
}
但是,当用户单击需要登录才能访问的组件的一部分时,如以下所示,当我进行路线更改时,URL未定义
this.router.navigate(['login'], {
queryParams: {
return: this.url
}
});
奇怪的是,这个完全相同的代码适用于Parent组件的相同方案。
子组件没有得到路由器事件以设置URL的原因吗?
预先感谢...
答案 0 :(得分:0)
问题的详细信息:
构造函数中的代码每次在路由中进行更新时都会更新组件的url变量。如果您在行this.url = e.url;
处设置一个断点,则会看到它触发了很多次,并且每次都会得到不同的事件项,例如NavigationStart
,NavigationEnd
等(作为您定义的e:any
项),请参见router event了解更多详细信息。
解决方案:
将url
变量分配给router.url
变量,如下所示:
constructor(private router: Router) {
this.url = router.url;
}