如何从Angular 2中的firebase获取一条记录

时间:2017-03-04 12:23:21

标签: angular typescript firebase angular2-observables

我正试图通过Angular 2 app中的firebase数据库获取uid的一条记录。问题是我总是在profile变量中得到undefinied。你能告诉我这样做的正确方法吗?谢谢! 我的代码:

个人资料类

export class Profile{
   constructor(public $key:string, public userId:string, public description:string, public avatarUrl: string){
   }

    static parseFromJson({$key, userId, description, avatarUrl}):Profile{
        return new Profile($key, userId, description, avatarUrl);
    }
}

个人资料服务

@Injectable()
export class ProfilesService {
  constructor(private db: AngularFireDatabase) {
  }

  getUserByUserId(userId:string): Observable<Profile>{
    return this.db.list('profiles',{
        query: {
          orderByChild: 'userId',
          equalTo: userId
      }
    }).map(result => Profile.parseFromJson(result[0]));
  }
}

个人资料组件

export class ProfileComponent {

  profile: Profile;
  uid: string;

  constructor(private profileService: ProfilesService, private af: AngularFire) {
    this.af.auth.subscribe(auth => this.uid = auth.uid);
    this.profileService.getUserByUserId(this.uid).subscribe(
        result => {
          this.profile = result;
        }
     );
   }
}

1 个答案:

答案 0 :(得分:2)

结果是一个数组,您可能想要获取第一个值并返回Observable

  

.first仅发出源Observable发出的第一个值(或满足某些条件的第一个值)。

 getUserByUserId(userId:string): Observable<Profile>{
    return this.db.list('profiles',{
        query: {
          orderByChild: 'userId',
          equalTo: userId
      }
    })
    .first()
    .map(result => Profile.parseFromJson(result));