在AngGuard中调用AuthGuard之前先加载数据

问题描述

我目前正在我的路线上实施Auth Guard。我想在调用authguard之前先加载数据。目前,我正在这样做。

在我的 auth-guard.service.ts 中,我有这个。

canActivate(route: ActivatedRouteSnapshot,state: RouterStateSnapshot) {
    if ( this.authService.isLoggedIn() ) {
      return true;
    } else {
      this.router.navigate(['login']);
      return false;
    }
  }

在我的 auth.service.ts

 export class AuthService {

  constructor() { }

  
  isLoggedIn() {
    return this.getUser() !== null;
  }

  setSession(userId: string) {
    sessionStorage.setItem('userId',userId);
  }

  getUser() {
    return sessionStorage.getItem('userId');
  }

}

在我的路线中,我叫Auth Guard和DataResolver

const routes: Routes = [
  {
    path: '',component: UserComponent,canActivate: [AuthGuardService],resolve: {
      data: DataResolver
    },children: [
      {
        path: '',redirectTo: 'dashboard',pathMatch: 'full',},{
        path: 'dashboard',component: UserDashboardComponent,data: {
          breadcrumb: 'Dashboard',}
    ]
  ]

DataResolver

@Injectable({
  providedIn: 'root'
})
export class DataResolver {

  constructor(private authService: AuthService,private activatedRoute: ActivatedRoute) { }

  resolve() {
    this.activatedRoute.queryParams.subscribe((data) => {
      const userId = data.userId;
      if (userId) {
        this.authService.setSession(userId);
      }
    });
  }
}

为什么它仍然首先调用auth Guard。我想在auth保护之前先调用DataResolver的内容

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...