Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/32.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
AngularFire 2访问.subscribe()外部的数据_Angular_Firebase_Angularfire2 - Fatal编程技术网

AngularFire 2访问.subscribe()外部的数据

AngularFire 2访问.subscribe()外部的数据,angular,firebase,angularfire2,Angular,Firebase,Angularfire2,我用这段代码从数据库中提取用户数据 import { Component } from '@angular/core'; import { NavController } from 'ionic-angular'; import {AngularFireAuth} from 'angularfire2/auth'; import {AngularFireDatabase,AngularFireList} from 'angularfire2/database'; @Component({

我用这段代码从数据库中提取用户数据

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 ?
  }
}
从'@angular/core'导入{Component};
从'ionic angular'导入{NavController};
从'angularfire2/auth'导入{AngularFireAuth};
从“angularfire2/database”导入{AngularFireDatabase,AngularFireList};
@组成部分({
选择器:“页面配置文件”,
templateUrl:'profile.html'
})
导出类配置文件页面{
轮廓数据:可观察
构造函数(私有fire:AngularFireAuth、私有db:AngularFireDatabase、公共navCtrl:NavController){
this.profileData=this.fire.authState.switchMap(auth=>this.db.object(`profile/${auth.uid}`)).snapshotChanges().map(操作=>{
const$key=action.payload.key;
const data={$key,…action.payload.val()};
返回数据;
}))
.订阅(个人资料=>{
this.profileData=profile;
console.log(this.profileData.username);//这正在工作。
});
console.log(this.profileData.username);//这是未定义的
//如何在订阅功能之外访问用户名?
}
}
我的问题是:如何在订阅功能之外访问用户名以在其他地方使用它?我在代码上添加了注释。

像这样导入

import { AngularFireDatabase, FirebaseObjectObservable } from 'angularfire2/database';
在类中声明变量,如

profileData: FirebaseObjectObservable<any[]>;
profileData:FirebaseObjectObservable;

它是未定义的,因为profileData需要一些时间来获取其值,并且在数据到达时调用
subscribe()
方法。 但是subscribe回调外部的
console.log()
将直接执行


但如果需要,您可以在模板中使用
profileData
。当数据到达并且执行了
subscribe()
函数时,它将更新。

这不是旧方法吗?只有在
.subscribe()
方法中定义了它,才能在代码中使用它。您可以从那里调用其他函数,这些函数使用或转换profileData。