canActivated in angular2

时间:2016-11-30 14:34:25

标签: angular angular2-routing

我使用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。 我真的明白为什么会这样。

1 个答案:

答案 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;