路由器事件未在子组件中触发,但在父组件中触发

时间:2018-12-15 11:04:39

标签: angular angular2-routing

我有一个子组件,希望访问当前的路由器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的原因吗?

预先感谢...

1 个答案:

答案 0 :(得分:0)

问题的详细信息

构造函数中的代码每次在路由中进行更新时都会更新组件的url变量。如果您在行this.url = e.url;处设置一个断点,则会看到它触发了很多次,并且每次都会得到不同的事件项,例如NavigationStartNavigationEnd等(作为您定义的e:any项),请参见router event了解更多详细信息。

解决方案

url变量分配给router.url变量,如下所示:

constructor(private router: Router) {
  this.url = router.url;
}