Я реализовал LazyLoading по пути /projects/1/sub
и затем применил CanLoad к маршруту
{ path: 'projects/:projectId/sub',
canLoad: [AuthGuard],
canActivate: [AuthGuard],
loadChildren: './app-sub-line.module#AppSubLineModule' }
При переходе к /projects/1/sub/1
, который является маршрутом внутри модуля маршрутизации раздела, URL-адрес возврата при входе в систему отображается как /projects/:projectId/sub
, который фактически является путем маршрута.
Как я могу создать правильный URL-адрес возврата на canLoad? Вот соответствующий код AuthService.
import { Injectable } from '@angular/core';
import { CanActivate, CanLoad, ActivatedRouteSnapshot, RouterStateSnapshot, Router, Route, ActivatedRoute } from '@angular/router';
import { Observable } from 'rxjs';
import { AuthService } from '../services/auth.service';
@Injectable({
providedIn: 'root'
})
export class AuthGuard implements CanActivate, CanLoad {
constructor(private authService: AuthService, private router: Router) { }
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean> | Promise<boolean> | boolean {
if (this.authService.isAuthenticated()) {
return true;
}
else {
//passing the query string to bring the user back to after signin
this.router.navigate([''], {
queryParams: {
return: state.url
}
});
return false;
}
}
canLoad(route: Route): Observable<boolean> | Promise<boolean> | boolean {
if (this.authService.isAuthenticated()) {
return true;
}
else {
//passing the query string to bring the user back to after signin
//alert(route.path)
this.router.navigate([''], {
queryParams: {
return: route.path
}
});
return false;
}
}
}