我正在学习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>
请提出一个更好的解决方案
答案 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();
}
然后,您将像往常一样订阅该可观察对象。