从canActivate返回boolean或Observable <boolean>

时间:2017-05-01 09:16:50

标签: angular rxjs angular2-observables

我有这个要求,我必须首先加载一些应用程序设置,然后获取用户信息。所以代码目前是如何 -

    canActivate(route, state):boolean/Observable<boolean>{

       return this.getSettings().map(response=>
    {
      this.data1=response;
      this.getUser()
    }).catch(error=>
    {
      this.error=error<any>;
    })
    )

}

这里受到警卫保护的路线取决于getSettings()的booelan状态,但我不希望如此。我想要的是取决于getUser()的布尔状态。

getUser()的成功回调中调用

getSettings(),因为它取决于来自getSettings()的部分数据。

这是getUser()

 getUser(){
    return this.service.getUser().
    subscribe(
    response=>//do some stuff
    ,
    error=> this.router.navigate(['errorpage'])
    )

}

我尝试在单独的getAppSettings中分隔settingsService的代码,然后在canActivate中执行此操作 -

canActivate(route, state):boolean/Observable<boolean>/Promise<boolean>{
    return this.settingsService.getSettings().toPromise().then(
                   function(auth:boolean){
                                        if(!auth){
                                        return Promise.resolve(false);
                                        }else{
                                        return this.service.getUser().
                                                  subscribe(
                                                   response=>{//do some stuff

                                                     return Promise.resolve(true);},
                                                   error=> {this.router.navigate(['errorpage']), Promise.resolve(false)}
    )
   }
  }
 )
}

但上述代码不允许我从boolean/Promise<boolean>/Observable<boolean>getUser函数返回canActivate。我怎样才能实现它?

0 个答案:

没有答案