感谢所有回答。
我通过以下方式解决了这个问题:
1- 我导入了 Subscription,然后我声明了 Subscription 类型的 'authenticatedUser$' var,然后我声明了 User(firebase 用户)类型的 'authenticatedUser' var。 - “login.ts”
2- 在构造函数中,我将在 'authenticatedUser$' var 中获取当前 Authenticated User,然后将其订阅到 'authenticatedUser' var。 - “AuthProvider.ts”
3- 最后一件事,我会将authenticatedUser var 作为参数发送给我的DataProvider,并且我将订阅返回值。 - “DataProvider.ts”
AuthProvider:
import { LoginResponse } from '../../models/login-response';
import { Injectable } from '@angular/core';
import { AngularFireAuth } from 'angularfire2/auth';
import { Account } from '../../models/account';
....................
constructor(public auth:AngularFireAuth) {
console.log('Hello AuthProvider Provider');
}
public getAuthenticatedUser(){
return this.auth.authState;
}
数据提供者:
import { Injectable } from '@angular/core';
import { AngularFireDatabase, AngularFireObject, AngularFireList } from 'angularfire2/database';
import { User } from 'firebase/app';
import { Profile } from '../../models/profile';
................
profileObject: AngularFireObject<any>;
constructor(public database: AngularFireDatabase) {
}
public getProfile(user: User){
this.profileObject = this.database.object(`profiles/${user.uid}`);
return this.profileObject.valueChanges();
}
login.ts
import { Component } from '@angular/core';
import { IonicPage, NavController, NavParams, ToastController } from 'ionic-angular';
import { LoginResponse } from '../../models/login-response';
import { DataProvider } from '../../providers/data/data';
import { User } from 'firebase/app';
import { Subscription } from 'rxjs/Subscription';
import { AuthProvider } from '../../providers/auth/auth';
................
user = {} as User;
private authenticatedUser$: Subscription;
private authenticatedUser: User;
constructor(public navCtrl: NavController,
public toast:ToastController, public navParams: NavParams, public data: DataProvider,
private myAuthProvider:AuthProvider) {
this.authenticatedUser$ = this.myAuthProvider.getAuthenticatedUser()
.subscribe((user: User)=>{
this.authenticatedUser = user
})
this.data.getProfile(this.authenticatedUser).subscribe(profile =>{
console.log(profile);
if (profile) {
this.navCtrl.setRoot("TabsPage")
} else {
this.navCtrl.setRoot("EditProfilePage");
}
});
}