代码之家  ›  专栏  ›  技术社区  ›  Hari

无法在angular2和firebase中获取登录用户详细信息?

  •  1
  • Hari  · 技术社区  · 8 年前

    我不熟悉angular和firebase,比如说我有一个像follow这样的服务,我正在使用 angularfire2 使用数据库的步骤

    import { Injectable } from '@angular/core';
    import { AngularFireDatabase, FirebaseListObservable, 
    FirebaseObjectObservable } from 'angularfire2/database';
    import { AngularFireAuth } from 'angularfire2/auth';
    import { AuthService } from '../../../services/auth.service';
    
    @Injectable()
    export class GroupsService {
    
    user: User;
    
    constructor(
     private afAuth: AngularFireAuth,
     private db: AngularFireDatabase,
    )  {
    
    this.afAuth.authState.subscribe( ( loggedInUser ) => {
      this.user = {
        email: loggedInUser.email,
        id: loggedInUser.uid
      };
    
      console.log(this.user) //getting logged in user info correctly
    });
    }
    
    getGroups():FirebaseListObservable<any[]>{
     console.log(this.user);  //unable to get logged in user
     return this.db.list('groups',{
       query : {
         orderByChild: 'createdBy/email',
         equalTo: this.user.email
       }
      });
    }
    

    在…上 getGroups() console.log(this.user); 我正在 undefined ,请问如何解决这个问题?

    1 回复  |  直到 8 年前
        1
  •  0
  •   Hari    8 年前

    我通过本文提供的信息解决了这个问题 link

    @Injectable()
    export class GroupsService {
    
    /**
    * Observable for firebase user
    */
    loggedInUser$: Observable<firebase.User>;
    
    
    /**
    * 
    * @param authService 
    * @param db 
    */
    constructor(
    private authService: AuthService,
    private db: AngularFireDatabase,
    ) {
    
     this.loggedInUser$ = authService.user.share();
    }
    
    /**
    * 
     */
    getGroups():FirebaseListObservable<any>{
    
      return this.loggedInUser$.mergeMap( user => {
    
      let email = user.email;
      return this.db.list('groups', {
        query: {
          orderByChild: 'createdBy/email',
          equalTo: email
        }
      }) 
      }) as FirebaseListObservable<any[]>
     }
     }