我有一个简单的简单系统,带有Firebase的用户身份验证系统。我想收到当前登录用户的数据列表。我通过订阅Firebase中的observable从当前登录用户那里获取信息。
但是,在调用private authId
函数之前,不会调用在我的构造函数中设置的getAllEmails()
的值。因此${this.authId}
产生未定义。在调用getAllEmails
函数之前,如何确保从observable中获取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 :(得分:1)
您可以为此做几件事
解决方案如下:
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());
}
}
第二个解决方案是:
而不是基类有另一个服务类来获取控制器中的AuthId并传递它。我认为第一个解决方案要好一点。