所以我有这个警卫在我的应用程序上观看受保护的路线 基本上,我的会话服务从NgOnInit中的localStorage中提取其凭据,然后警卫应该询问服务是否有凭据,以便它知道是否应批准此路由
import { Injectable } from '@angular/core';
import { Router, CanActivate } from '@angular/router';
import { SessionService } from './../session/session.service'
@Injectable()
export class AuthGuard implements CanActivate {
constructor(
private router: Router,
private sessionService: SessionService
) { }
canActivate() {
//without this line this won't work
//this.sessionService.loadUser();
if (this.sessionService.isValidSession()) {
// logged in so return true
return true;
}
// not logged in so redirect to login page
this.router.navigate(['/login']);
return false;
}
}
这是我的会话服务:
export class SessionService implements OnInit {
.
.
.
constructor(
private authService: AuthenticationService,
) {
this.timeout = null;
}
ngOnInit() {
this.loadUser();
}
现在问题是我的会话服务上的ngOnInit没有被自动调用,我必须在guard中显式调用loadUser(),这不是我想做的事情
知道怎么让会话服务的ngOnInit在canActive of guard之前执行吗?
非常感谢!!!
答案 0 :(得分:0)
请勿使用" OnInit"只有组件的服务。而是在服务的构造函数中调用所需的加载逻辑