Событие маршрутизатора не запускается в дочернем компоненте, но происходит в родительском компоненте - PullRequest
0 голосов
/ 15 декабря 2018

У меня есть дочерний компонент, который хочет иметь доступ к текущему 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
    }
});

Странно то, что этот точно такой же кодработает для того же сценария для родительского компонента.

Есть ли причина, по которой дочерний компонент не получает событие маршрутизатора для установки URL-адреса?

Заранее спасибо ...

1 Ответ

0 голосов
/ 25 декабря 2018

Подробности вашей проблемы :

Код в вашем конструкторе обновляет переменную url компонента каждый раз, когда в маршруте происходит обновление.Если вы установите точку останова в строке this.url = e.url;, вы увидите, что она срабатывает много раз и каждый раз получает различный элемент события, например, NavigationStart, NavigationEnd и т. Д. (Как элемент e:any, который вы определили), см. событие маршрутизатора для получения дополнительной информации.

Решение :

НазначитьВаша переменная url с переменной router.url выглядит так:

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