如何为angular2中的其他组件设置isLogged变量

时间:2016-06-28 06:27:44

标签: angular observable angular2-services

我有一个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

,但我没有,如何解决。

1 个答案:

答案 0 :(得分:0)

当HTTP请求的响应到来时,此authService.isLoggedtrue。 Angular不会等待响应,而是继续执行代码。对auth-server/uaa/user的调用仅被调度(添加到事件队列)并处理为异步。然后,当响应到来时,调用传递给.subscribe(...)的回调。

根本无法保证答复已经到达ngOnInit()

您可以做什么取决于您使用isLogged值的位置或方式。