如何从AngularFireObject <object>获取值

时间:2019-04-17 16:03:54

标签: angular

我正在学习Angular,创建了执行数据库操作时卡住的基本应用。

我有如下服务可以从数据库中获取用户

getUser(uid : String) : AngularFireObject<AppUser> {
    return this.db.object('/users/'+uid);
  }

我从canActivate方法中调用上述函数,我需要获取用户并返回用户对象的属性(return user.isAdmin,boolean property)。所以我在下面的代码中添加了

 canActivate() :  Observable<boolean>{
    return this.auth.user$.map(user =>  this.userService.getUser(user.uid)).map( appUser => appUser.isAdmin);
  }

在上面的代码中,我无法调用appUser.isAdmin。您能否帮助我从canActivate方法返回isAdmin属性。引发以下错误

Property 'isAdmin' does not exist on type 'AngularFireObject<AppUser> 

请提出一个更好的解决方案

2 个答案:

答案 0 :(得分:1)

您不能做appUser.isAdmin,因为appUser不是AppUser类型的,我假设isAdmin是其属性。根据此功能,

getUser(uid : String) : AngularFireObject<AppUser> {
    return this.db.object('/users/'+uid);
  }

返回类型为AngularFireObject。请按照Josie的解决方案返回一个可观察的对象,该对象将在订阅时给您AppUser对象。

答案 1 :(得分:0)

阅读了一些AngularFire documentation之后,我认为您需要转动

getUser(uid : String) : AngularFireObject<AppUser> {
    return this.db.object('/users/'+uid);
  }

进入

getUser(uid : String) : Observable<AppUser> {
    return this.db.object('/users/'+uid).valueChanges();
  }

然后,您将像往常一样订阅该可观察对象。