我有一个实现CanActivateAuthGuard(用于路由).

canActivate() {
    return this.loginService.isLoggedIn();
}

我的问题是,CanActivate结果取决于http get结果——LoginService返回Observable.

isLoggedIn():Observable<boolean> {
    return this.http.get(ApiResources.LOGON).map(response => response.ok);
}

我如何将这些结合在一起-使CanActivate依赖于后端状态?

# # # # # #

EDIT: Please note, that this question is from 2016 - a very early stage of angular/router has been used.

# # # # # #

推荐答案

您应该将"@ANGLING/ROUTER"升级到最新版本.例如"3.0.0-α8"

modify AuthGuard.ts

@Injectable()
export class AuthGuard implements CanActivate {
    constructor(private loginService: LoginService, private router: Router) {}

    canActivate(next: ActivatedRouteSnapshot, state: RouterStateSnapshot) {
        return this.loginService
            .isLoggedIn()
            .map((e) => {
                if (e) {
                    return true;
                }
            })
            .catch(() => {
                this.router.navigate(['/login']);
                return Observable.of(false);
            });
    }
}

如果你有任何问题,问我

Angular相关问答推荐

无法执行CanDeactivateFn Karma Test Angular 16

单元测试 case 模拟store 中的行为主体

Angular 如何渲染ngFor?

如何防止打印后的空格后的HTML元素的Angular ?

nx serve正在忽略@angular/localize/init的导入"

ANGLE v16独立组件不能与拦截器一起工作?

错误TS2531:对象可能为空.论窗体数组控件

JsPDF Autotable 将图像添加到列中出现错误:属性getElementsByTagName不存在

以 Angular 形式添加动态控件失败

Subject.complete() 是否取消订阅所有听众?

Angular 2:Validators.pattern() 不工作

更改 Select 选项时获取当前值

如何在 Angular CLI 1.1.1 版中将路由模块添加到现有模块?

什么是 Angular 4,我可以从哪里了解更多信息?

Angular-CLI 代理到后端不起作用

如何使用依赖注入扩展组件?

Angular2 - 如何开始以及使用哪个 IDE

Angular 2表单验证重复密码

如何导航到同级路由?

Angular 4 - 获取输入值