2016-10-28 5 views
1

Firebaseのユーザー認証システムを使用したシンプルなシステムを使用しています。私は現在ログインしているユーザのデータのリストを受け取りたいと思っています。私は、Firebaseから観測可能なものを購読することで、現在ログインしているユーザから情報を取得します。Angular2で関数を実行する前に観測可能な値を取得する

getAllEmails()関数が呼び出される前に、しかし、私のコンストラクタで設定されてprivate authIdの値が呼び出されません。したがって、${this.authId}は未定義となります。 getAllEmails関数が呼び出される前に、私が監視対象からauthIdの値を取得できることを確認するにはどうすればよいですか?

import { Injectable } from '@angular/core'; 
import { AngularFire, FirebaseListObservable } from 'angularfire2'; 
import { Email } from '../email'; 
import { AuthService } from '../auth/auth.service'; 

@Injectable() 
export class EmailService { 

    private authId: string; 

    constructor(
    private af: AngularFire, 
    private authService: AuthService 
) { 
    this.authService.getUserInformation() 
     .subscribe(user => { 
     this.authId = user.authId; 
     }) 
    }  

    getAllEmails(): FirebaseListObservable<any> { 
    return this.af.database.list(`/emails/${this.authId}`); 
    } 

} 
+0

ここでgetAllEmails()を呼び出していますか? ngOnInit() –

+0

うん、そしてそれをクラス変数に代入する – user3642173

答えて

1

物事のカップルは、あなたがベースのサービスクラスを作成するには、この

  1. のために行うと、基本クラスのコンストラクタ
  2. でAUTHIDを得ることができますがあり、コンポーネントのコンストラクタとコールにAUTHIDを取得しますgetAllEmails(AUTHID)

溶液は以下である:

export class baseService{ 

private authId: string; 

    constructor(private authService: AuthService) { 
    this.authService.getUserInformation() 
     .subscribe(user => { 
     this.authId = user.authId; 
     }) 
    } 
getAuthId(): number{ 
     return this.authId; 
} 
} 

import {baseService} from '<yourPath>' 

@Injectable() 
export class EmailService extends baseService { 

    private authId: string; 

    constructor(private af: AngularFire) { }  

    getAllEmails(): FirebaseListObservable<any> { 
    return this.af.database.list('/emails/'+ super.getAuthId()); 
    } 

} 

第2の解決策は、コントローラのAuthIdを取得して渡すための別のサービスクラスを持つ基本クラスではなく、

です。私は最初の解決策が少し良いと思います。

+0

ありがとう。ただし、EmailServiceでsuper()呼び出しを省略したようです。どのように見えるだろうか?私はスーパー(authService)をしようとするとエラーが発生します – user3642173

+0

カムラン、あなたのセットアップでスーパー()コールを行うための最良のセットアップは何ですか? – user3642173

+0

私はちょうど提案をしました。基本クラスのメソッドを呼び出すためのtypescript docsを見てください –

関連する問題