我使用typescript在角度2中创建了一些应用程序并添加了身份验证。
我为路由文件创建了authguard:
@Injectable()
export class AuthGuard implements CanActivate {
public router: Router;
public serverThisLogin: ServerDataComponent;
constructor(router: Router) {
this.router = router;
}
public canActivate(): boolean {
if (this.serverThisLogin.isLogin) {
return true;
}
this.router.navigate(["/login"]);
return false;
}
}
这是isLogin()
函数:
public isLogin (username: string, password: string): Observable<boolean> {
return this.http.post( authURL + loginURL,
JSON.stringify({ password, username }))
.map((response: Response) => {
if (response.status === 200) {
return true;
} else {
return false;
}
});
}
我在路线文件中添加了authguard:
{ canActivate: [AuthGuard], component: LaskComponent, path: "table_per" }
现在,当我加载此页面localhost/table_per
时出现此错误:
TypeError: Cannot read property 'isLogin' of undefined
。
我真的明白为什么会这样。
答案 0 :(得分:1)
您只需注入服务即可使用它,利用Typescript的可能性正确使用DI容器:
@Injectable()
export class AuthGuard implements CanActivate {
public router: Router;
public serverThisLogin: ServerDataComponent;
constructor(private router: Router, private serviveThisLogin: ServerDataComponent) {}
public canActivate(): boolean {
if (this.serverThisLogin.isLogin) {
return true;
}
this.router.navigate(["/login"]);
return false;
}
}
此外,您可以通过以下方式简化您的情况:
if (response.status === 200) {
return true;
} else {
return false;
}
对此:
return response.status === 200;