初始化后从Firebase获取数据

时间:2017-05-29 12:23:32

标签: angular typescript firebase firebase-realtime-database

我想在连接到Firebase

之后才从我的主要组件中获取数据
this.AngularFireModule.initializeApp(environment.firebase)

这是在我的app.module中。我想在Firebase初始化后从db获取数据。 问题是我尝试从db获取我的用户数据,但我第一次尝试时出错,因为我的应用程序没有连接到firebase。当我刷新页面时没有问题因为已经连接了。

这是我的app.module.ts

 @NgModule({
declarations: [
AppComponent,
HomeComponent,
CategorieComponent,
SignComponent,
TopicComponent
],
imports: [
BrowserModule,
FormsModule,
HttpModule,
RouterModule.forRoot(appRoutes),
AngularFireModule.initializeApp(environment.firebase),
AngularFireDatabaseModule, // imports firebase/database, only needed 
for database features
AngularFireAuthModule // imports firebase/auth, only needed for auth 
features
],
providers: [SharedService, UsersService],
bootstrap: [AppComponent]
})
export class AppModule { }

1 个答案:

答案 0 :(得分:1)

- 编辑 -
它不是Firebase问题,而是一个时间问题。启动应用后,Firebase必须从localstorage读取和解密用户令牌。在此之前,currentUser未定义,如果您尝试访问电子邮件或uid等属性,则会出现错误。

我建议您使用Observables来跟踪更改。否则,您将在登录和注销时收到相同的问题。这可能如下所示:

<强> userService.ts

val authInfo = passwordHasherRegistry.current.hash(data.password)

<强> component.ts

...
public authInfo = new BehaviorSubject<UserInfo>(undefined);
authInfo$ = this.authInfo.asObservable();

constructor(private fbAuth: AngularFireAuth) {
   this.fbAuth.auth.onAuthStateChanged(authInfo => this.authInfo.next(authInfo));
}
...

<强> component.html

...
authInfo$: Observable<UserInfo>;

constructor(private userService: UserService) {
   this.authInfo$ = this.authService.authInfo$;
}
...

async-pipe管理observable的订阅,elvis-operator(?)检查null和undefined。