Angular2 – 返回布尔值,订阅canActivate

前端之家收集整理的这篇文章主要介绍了Angular2 – 返回布尔值,订阅canActivate前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我是Angular中的新手,我需要实现一个返回true / false的函数,我将在canActivate中使用return,但是这个函数使用http.get的api,所以就像通信是异步的一样,这个函数总是返回FALSE,因为http.get还在进行中.

我的班主任:

  1. canActivate(route: ActivatedRouteSnapshot,state: RouterStateSnapshot): boolean {
  2.  
  3. let url: string = state.url;
  4.  
  5.  
  6. if (this.loginService.isLoggedIn()) {
  7. return true;
  8. }
  9.  
  10. this.loginService.redirectUrl = url;
  11.  
  12. this.router.navigate(['login']);
  13.  
  14. return false;
  15. }

函数isLoggedIn()

  1. isLoggedIn() {
  2.  
  3. let logged: boolean = false;
  4.  
  5. this.http.get('api/values',this.httpService.headers())
  6. .map((res: Response) => {
  7. logged = res.json();
  8. });
  9.  
  10. return logged;
  11.  
  12. }

我读了很多问题,但我找不到答案.

后卫说明它可以回归
  1. Observable<boolean>,Promise<boolean> or boolean

所以将isLoggedIn更改为:

  1. isLoggedIn() {
  2.  
  3. return this.http.get('api/values',this.httpService.headers())
  4. .take(1)
  5. .map((res: Response) => res.json());
  6. }

更新

  1. canActivate(route: ActivatedRouteSnapshot,state: RouterStateSnapshot): boolean {
  2. let url: string = state.url;
  3.  
  4. return this.isLoggedIn().map(loggedIn => {
  5. if(!loggedIn) {
  6. this.loginService.redirectUrl = url;
  7. this.router.navigate(['login']);
  8. }
  9. return loggedIn;
  10. }
  11. }

猜你在找的Angularjs相关文章