用查询字符串进行Angular 5路由

时间:2018-07-11 09:15:04

标签: angular angular-routing canactivate

我正在编写我的angular 5+应用程序,并使用for (x=1; x < document.getElementsByClassName('div').length; x++) { $('#div' + x).load('#table' + x); } 进行的操作是从另一个AuthGuardService应用程序重定向,该应用程序向我发送查询字符串中的表单数据

php

http://localhost:44200/#/users/save?first_name=John&last_name=Doe 如果用户未使用以下代码登录,则将其正确重定向至登录

AuthGuardService

但是登录后,如果没有查询字符串,我可以重定向返回url,我想将用户与所有查询字符串重定向到同一页面。

请指导我如何处理。

1 个答案:

答案 0 :(得分:2)

这就是我的方法。在您的AuthGuard#canActivate中添加以下内容:

@Injectable()
export class AuthGuard implements CanActivate{

  originRoute:ActivatedRouteSnapshot;

  constructor(private authentificationService: AuthChecker,
              private router: Router){}

  canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean> | Promise<boolean> | boolean {
    if(localStorage.getItem('crmUser')){
       return true;
    }
    this.originRoute = route;
    this.router.navigate(['/login'], { queryParams: {returnUrl: state.url},queryParamsHandling: 'merge' });
    return false;


    }
  }

  public hasOriginRoute(): boolean{
    return this.originRoute != null;

  }
}

成功登录后,现在在您的LoginComponent中添加:

if(this.authGuard.hasOriginRoute()){
   this.router.navigate(this.authGuard.originRoute.url.map((x) => x.path));
}