[英]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.