繁体   English   中英

Angular2 CanActivate未定义

[英]Angular2 CanActivate undefined

我想在我的应用中添加一些限制路线。 我写了一个Guard,就像在这里的文档中解释的那样,但是我尝试不使用打字稿来实现它: https ://angular.io/docs/ts/latest/guide/router.html#!#guards

我的Guard看起来像这样,但我不能使用CanActivate,因为它未在@angular/router v3.1.1中定义

import { Router, CanActivate } from '@angular/router';
import { AuthService } from './app.auth.service';

console.log(CanActivate); // undefined

export class AuthGuard extends CanActivate {
  constructor(AuthService) {
    super();
    this._authService  = AuthService;
  }

  canActivate() {
      return this.checkIfLoggedIn();
  }

  _checkIfLoggedIn() {
      const user = this._authService.getUser();

      return user;
  }

  static get parameters() {
    return [[AuthService]];
  }
}

有任何想法吗?

编辑

这种方法按预期工作,感谢@PierreDuc帮助我重回正轨。

import { Router } from '@angular/router';
import { AuthService } from './app.auth.service';

export class AuthGuard  {
  constructor(AuthService, Router) {
    this._authService = AuthService;
    this._router = Router;
  }

  canActivate() {
    if (this._authService.isLoggedIn()) {
      return true;
    }

    this._router.navigate(['/login']);
    return false;
  }

  static get parameters() {
    return [[AuthService], [Router]];
  }
}

那是因为这是一个interface 仅在TypeScript中的类型提示和静态键入中使用。 在编译的JavaScript没有实际输出。 因此,它将在逻辑上评估为undefined

你的代码可能无法工作的一个原因是因为你用checkIfLoggedIn并定义一个函数_checkIfLoggedIn (在_中缺少调用)。

另一个原因可能是getUser是一个异步函数。 在这种情况下,您应该返回一个Observable<boolean>Promise<boolean>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM