2017-10-23 7 views
0

이 코드를 사용하여 데이터베이스에서 사용자 데이터를 가져옵니다.AngularFire 2 외부 데이터 액세스 .subscribe()

import { Component } from '@angular/core'; 
import { NavController } from 'ionic-angular'; 
import {AngularFireAuth} from 'angularfire2/auth'; 
import {AngularFireDatabase,AngularFireList} from 'angularfire2/database'; 

@Component({ 
    selector: 'page-profile', 
    templateUrl: 'profile.html' 
}) 

export class ProfilePage { 
    profileData: Observable<any[]> 

    constructor(private fire:AngularFireAuth,private db :AngularFireDatabase,public navCtrl: NavController) { 

    this.profileData = this.fire.authState.switchMap(auth => this.db.object(`profile/${auth.uid}`).snapshotChanges().map(action => { 
     const $key = action.payload.key; 
     const data = { $key, ...action.payload.val() }; 
     return data; 
    })) 
    .subscribe(profile =>{ 
     this.profileData = profile; 
     console.log(this.profileData.username); // this is working. 
    }); 
    console.log(this.profileData.username); // this is undefined 
    // How to access username outside subscribe function ? 
    } 
} 

내 질문은 : 어떻게 사용자 이름이 밖에 다른 곳에서 그것을 사용하는 기능을 구독 액세스 할 수? 코드에 주석을 추가했습니다. 이 같은

답변

-1

가져 오기, 클래스

import { AngularFireDatabase, FirebaseObjectObservable } from 'angularfire2/database'; 

같은 변수를 선언는

profileData: FirebaseObjectObservable<any[]>; 
+0

이 오래된 방법이 아닙니까? –

0

profileData이기 때문에 그것은 정의되지는 그 값을 얻기 위해 약간의 시간이 필요하고 subscribe() 방법은 경우라고 데이터가 도착합니다. 그러나 subscribe 콜백 외부의 console.log()이 직접 실행됩니다.

하지만 필요한 경우 템플릿에 profileData을 사용할 수 있습니다. 데이터가 도착하고 subscribe() 기능이 실행되면 업데이트됩니다.

+0

예 html에서 사용할 수 있지만 코드에서 사용하는 방법 –

+0

'.subscribe()'메소드에서 정의 된 코드에서만 사용할 수 있습니다. 거기에서 profileData를 사용하거나 변환하는 다른 함수를 호출 할 수 있습니다. –