Angular 2 - 在

时间:2016-10-25 11:38:07

标签: javascript angular typescript

所以我有这个警卫在我的应用程序上观看受保护的路线 基本上,我的会话服务从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之前执行吗?

非常感谢!!!

1 个答案:

答案 0 :(得分:0)

请勿使用" OnInit"只有组件的服务。而是在服务的构造函数中调用所需的加载逻辑