我有一个principalService用于从后台服务器获取当前经过身份验证的用户,而authService.ts包含一个本地变量' isLogged:boolean'
目标:想要获得' isLogged'的价值来自NavbarComponent中的authService。
principalService:
currentUser():Observable<any> {
return this.http.get("auth-server/uaa/user")
.map((res:Response)=> res.json())
.catch(this.handleError);
}
authService:
isLogged:boolean=false;
constructor(private principal:PrincipalService) {
this.authenticated();
}
authenticated() {
this.principal.currentUser().subscribe(e=> {
if (e) {
console.log('user has logged in');
this.isLogged = true;
}
},
error=> {
this.isLogged = false;
}
)
}
和NavbarComponent
ngOnInit() {
console.log('auth service isLogged is : '+this.authService.isLogged);
}
我使用&#39; isLogged&#39;的价值是什么以及如何使用来自authService:
退出时- 我想更改
authService的isLogged状态
和
是否显示&#39;登录&#39;并且&#39;退出&#39;按钮取决于isLogged authService的状态
问题是:
登录后,我希望
在NavbarComponent&#39; 中,&#39; this.authService.isLogged值为true
,但我没有,如何解决。
答案 0 :(得分:0)
当HTTP请求的响应到来时,此authService.isLogged
为true
。 Angular不会等待响应,而是继续执行代码。对auth-server/uaa/user
的调用仅被调度(添加到事件队列)并处理为异步。然后,当响应到来时,调用传递给.subscribe(...)
的回调。
根本无法保证答复已经到达ngOnInit()
。
您可以做什么取决于您使用isLogged
值的位置或方式。