我想为用户路由实现canActivate,然后再检查访问令牌是否仍然有效。因此,我实现了这样的事情
export class AuthGuard implements CanActivate {
data:Array<Object>;
constructor(private base: BaseService){}
canActivate(
next: ActivatedRouteSnapshot,
state: RouterStateSnapshot): boolean {
var session: any = { token: localStorage.getItem('abc') };
this.base.valid(session).subscribe(result => {
this.data=result;
console.log(this.data); <-- first
});
console.log(this.data); <-- second
return true;
}
}
在这里,当我进行控制台操作时,可以在subscribe方法中获取数据变量,但是在此方法之外是给定undefined
值。如何在方法之外访问它。
这将是不可能的。原因是,您想呈现一个值,其值由Observable连续更改。
现在,当您尝试读取outside
console.log时,由于该值尚未由Observable设置,因此您将无法定义streams
。现在,当值更改时(例如1秒钟后),outer
console.log已经执行,因此您将不会看到this.data
要监视其值的变化,请将函数调用放在subscribe
块本身中。
根据您的评论,您可以参考此链接
好的,但是我如何获得该值,我想根据该值返回布尔值。
基本上,我正在调用api来检查访问令牌是否有效。服务器返回
state
,现在基于此状态,我试图在canActivate方法中返回布尔值。在这里,我正在调用基本api,然后在subscribe中,我正在检查状态,以便可以根据状态返回布尔值@AshishJambhulkar:
canActivate
您可以将验证逻辑移至,而不是查看状态BaseService
,可以说:validRouting()
。现在,它validRouting()
可以从canActivate
服务本身返回(因为它可以返回Observable),其类型为observable
。希望你明白我的意思。