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。