в некоторых из моих охранников угловых маршрутов я хочу установить «следующий» путь, на который будет перенаправляться после успешного входа в систему.
Итак, сигнатура функции простого охранника canActivate
выглядит следующим образом:
public canActivate(route: ActivatedRouteSnapshot): Observable<boolean> | boolean {
// ...blah
return true;
}
Параметр route
является экземпляром ActivatedRouteSnapshot.
Ранее, чтобы получить «следующий» URL, я только что получил его от route.url
. Это работает просто отлично, если нет дочерних маршрутов.
Мой пример URL-адреса /search/advanced?query_hash=1221d3b57f5616ee16ce70fdc78907ab
, где advanced
- это дочерний маршрут search
.
Дочерние маршруты можно найти в route.children
, но итерации по этим дочерним элементам (особенно их может быть несколько уровней) и объединение URL-адресов таким образом кажется неловким и безобразным.
То, что меня интересует, содержится в свойстве route._routerState.url
(в виде строки в нижней части изображения ниже), но это переменная "private".
Я что-то упустил? Как можно элегантно получить полный (с детскими путями) URL из ActivatedRouteSnapshot
? Угловая версия 5.1.
![enter image description here](https://i.stack.imgur.com/a9OXL.png)