1

私は、角度とfirebaseに新しいです、私は従うようなサービスを持っているとしましょう、私はでは、ユーザーの電子メールアドレスでログインに基づいてグループを取得していますgetGroups()法上のデータベースangular2とfirebaseでログインユーザーの詳細を取得できませんか?

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 
    } 
    }); 
} 

で動作するようにangularfire2を使用していますその機能について、console.log(this.user);私はundefinedを取得しています、何かがこの問題を解決する方法をお祈りしますか?

+0

で与えられた情報により、この問題を解決するには、ここに私の答えを見てください。同様の問題のようですhttps://stackoverflow.com/a/46484449/2521893 –

+0

@FredrikLundinは答えてくれてありがとうございますが、私はshare()に疑念があります。 –

+0

共有を使用することで、ユーザーIDはすべての要求ではなく1回だけ取得されます。あなたはそれが働く方法に依存する –

答えて

0

私はこの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[]> 
} 
} 
関連する問題