How to elegantly get full url from the ActivatedRouteSnapshot? How to elegantly get full url from the ActivatedRouteSnapshot? angular angular

How to elegantly get full url from the ActivatedRouteSnapshot?


There's no ready to use function from Angular router to achieve that, so I wrote them:

function getResolvedUrl(route: ActivatedRouteSnapshot): string {    return route.pathFromRoot        .map(v => v.url.map(segment => segment.toString()).join('/'))        .join('/');}function getConfiguredUrl(route: ActivatedRouteSnapshot): string {    return '/' + route.pathFromRoot        .filter(v => v.routeConfig)        .map(v => v.routeConfig!.path)        .join('/');}

Example output when route is from ProjectComponent:

const routes: Routes = [    {        path: 'project', component: ProjectListComponent, children: [            {path: ':id', component: ProjectComponent}        ]    },];getResolvedUrl(route) => /project/id1getConfiguredUrl(route) => /project/:id


try this to get it from RouterStateSnapshot

canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean {      console.log(state.url)      ...


The solution of Marc for his getResolvedUrl does not return query parameters.The function below has added support for queryparameters.

getResolvedUrl(route: ActivatedRouteSnapshot): string {  let url = route.pathFromRoot.map((v) => v.url.map((segment) => segment.toString()).join('/')).join('/');  const queryParam = route.queryParamMap;  if (queryParam.keys.length > 0) {    url += '?' + queryParam.keys.map(key => queryParam.getAll(key).map(value => key + '=' + value).join('&')).join('&');  }  return url;}