Ни один из них не работал для меня.
Есть много подходов к этому, но в этом случае была установлена защита, чтобы пользователи не переходили по определенным URL-адресам. Это работало нормально, за исключением случаев, когда URL-адрес имел параметры, поскольку переданный URL-адрес всегда содержал все параметры.
E.G: myPage/param1/param2
Or: myPage?param1=1¶m2=2
В этом случае я бы хотел просто myPage
.
Я закодировал ниже, мне это не нравится, я уверен, что это можно улучшить, но пока не нашел ничего, что работает:
let url: string = state.url;
let urlParams: string[];
if (url.includes("?")) {
url = url.substr(0, url.indexOf('?'));
} else {
urlParams = route.url.toString().split(';')[0].split(',');
if (urlParams.length > 1) {
urlParams.shift(); // Remove first element which is page name
// Get entire splitting on each param
let fullUrlSegments: string[] = state.url.split('/');
// Remove number of params from full URL
fullUrlSegments = fullUrlSegments.slice(0, fullUrlSegments.length - urlParams.length);
url = fullUrlSegments.join('/');
}
}
alert(url);
state.url
исходит из реализации CanActivate
(или внедрения Router
).
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) Observable<boolean> { ... }
person
Ricky
schedule
27.03.2018
this.dom.URL.split('?')[0]
-> где dom является экземпляромDOCUMENT
- person Pardeep Jain   schedule 07.08.2019@angular/router
, а затем просто использоватьthis.router.parseUrl(this.router.url).root.children.primary.segments
. Если цель состояла в том, чтобы как можно больше разработчиков предпочли Vue или React Angular, то это очень хорошо выполненная работа. Снимаю шляпу, архитекторы Angular! И нет, предоставления подписки недостаточно. Что делать, если я хочу получить активированные параметры маршрута в компоненте, созданном после изменения маршрута (т.е. в модальном)? Вам необходимо предоставить подписки, а также методы для получения текущего значения. Сделайте его удобным для детей! Это ваша цель! - person tao   schedule 10.10.2020