Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular2.subscribe有时不会启动路由器。导航_Angular - Fatal编程技术网

Angular2.subscribe有时不会启动路由器。导航

Angular2.subscribe有时不会启动路由器。导航,angular,Angular,我有一个登录功能: login(user: UserComponent) { let headers = new Headers(); headers.append('Content-Type', 'application/json'); headers.append("Authorization", "Basic " + btoa(user.username + ":" + user.password)); return this._http .get( 'https://api

我有一个登录功能:

login(user: UserComponent) {
let headers = new Headers();
headers.append('Content-Type', 'application/json');
headers.append("Authorization", "Basic " + btoa(user.username + ":" + user.password)); 
return this._http
  .get(
    'https://api.xxxxxxxxxxxx.com/rest/auth', 
    { headers }
  )
  .map(res => res.json())
  .subscribe(
    (data) => {
      this.loggedIn = true;
      console.log('data '+ this.loggedIn);
      localStorage.removeItem('auth_token');
      localStorage.setItem('auth_token', data.token);
      console.log(data.token);
      this._router.navigate(['']); 
    },
    (err) => {
      this.errorMsg = err.json().error_message
      console.log(this.errorMsg);
    }
  );}

isLoggedIn() {
    if(this.loggedIn){
      return true;
    }else{    
      this._router.navigate(['login']);
      return false;
    }
  }
我这样称呼它:

   constructor(private _userService: UserService, private _router: Router) {}

authUser() {
  let user = new UserComponent(this.username, this.password);
  this._userService.login(user);
@Injectable()
export class LoggedInGuard implements CanActivate {
  constructor(private _userService: UserService) {}

  canActivate() {
    console.log(this._userService.isLoggedIn());
    return this._userService.isLoggedIn();
  }

}
}

CanActivate如下所示:

   constructor(private _userService: UserService, private _router: Router) {}

authUser() {
  let user = new UserComponent(this.username, this.password);
  this._userService.login(user);
@Injectable()
export class LoggedInGuard implements CanActivate {
  constructor(private _userService: UserService) {}

  canActivate() {
    console.log(this._userService.isLoggedIn());
    return this._userService.isLoggedIn();
  }

}
更新#1 我想我找到了问题,但不知道如何解决。我用当前版本更新了上面的代码

问题似乎是当它在this.loggedIn设置为true之前执行保护运行的操作时。。。。返回错误,但。。。为什么?我该如何解决这个问题


谢谢

您的登录功能是异步的,这就是为什么在您从服务获取数据之前发生了
控制台.log
。您需要包装
控制台。在登录功能中登录
以查看数据

this._userService.login(user).subscribe(
  (data) =>{
    this.data = data
    console.log(this.data);
   },
(err) => this.errorMsg = err.json().error_message);

谢谢,但正如我上面所说的“数据或错误总是出现在console.log上,但是this._router.navigate(['');有时会触发,但大多数时候不会…”,我也尝试将其添加到那里,但没有任何变化,事实上,现在它从未触发。。但是控制台总是返回对象。。。