angular2: how to get Full path on CanLoad guard while maintaining redirect url

If you look the signature of the canLoad method, there is is a second parameter segments which you can use to generate the url.

canLoad(route: Route, segments: UrlSegment[]): Observable<boolean> | Promise<boolean> | boolean

You can generate the full path using following code:

canLoad(route: Route, segments: UrlSegment[]): boolean {

  const fullPath = segments.reduce((path, currentSegment) => {
    return `${path}/${currentSegment.path}`;
  }, '');



Note: With this method you will get the full path, but you will not get any query parameters.

There is another temporary workaround instead of replacing canLoad with canActivate:

You can store the url via redirectUrl = location.pathname and redirect later via this.router.navigateByUrl(redirectUrl);. Of course, if you work on a subpath (like domain) you have to adjust the pathname a little bit.

I have this exact same problem. These issues are related


And they even have an open PR about this which hasn't been merged yet


The workaround for now seems to be to replace the canLoad method with the canActivate, there you can have access to the full path, the bad thing of course is that you're loading the module

Edit: Also for you Assignment routing, there's no need to call canActivate for each child route. Have it defined on the parent route should apply the guard for all child routes.