问题描述
我目前正在我的路线上实施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 (将#修改为@)