我想在用户登录时从 Firebase 数据库的“/users/$key”网址将用户数据获取到 currentUser FirebaseObjectObservable,其中 $key 等于 auth.uid。我还希望何时用户注销,currentUser自动变为null。
为此,我认为我需要在模板中使用异步管道,但我只能在登录后获取 currentUser 数据,并在注销后保留在内存中(就像我所做的那样)。我希望当 auth 对象变为 null 时它会自动变为 null。
import { Component } from '@angular/core';
import { AngularFire, FirebaseObjectObservable } from 'angularfire2';
@Component({
selector: 'my-app',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css'],
})
export class AppComponent {
currentUser : FirebaseObjectObservable<any>;
constructor(public af: AngularFire) {
this.af.auth.subscribe(auth => {
console.log(auth);
this.currentUser = af.database.object('/users/' + auth.uid);
});
}
}
我可以在我的模板中使用类似的内容 {{(currentUser | async)?.email}}
我对 Observables 缺乏了解是这里的问题,而且 AngularFire auth 对象与我理解的 rxjs/Observable 不同。
更新:
这就是我解决这个问题的方法:
constructor(public af: AngularFire) {
this.af.auth.subscribe(auth => {
console.log(auth);
if(auth)
this.currentUser = af.database.object('/users/' + auth.uid);
else
this.currentUser = new FirebaseObjectObservable<any>();
});
}
但我感觉不太对劲。这样可以吗?
最佳答案
以下是如何在 View 中显示您的 uid。你让事情变得很困难。无需将其设为 FireBaseObjectObservable。 auth 会为你做一切
component.ts
export class DashboardComponent {
email:any;
userid: string;
constructor(public af: AngularFire) {
this.af.auth.subscribe(auth => {
console.log(auth.uid);
this.userid = auth.uid;
this.email = af.auth.getAuth().auth.email;
});
}
}
component.html
<h1>{{ userid}}</h1>
<h1>{{email}}</h1>
这就是您从用户那里获取所有数据的方式
关于typescript - 当用户登录(auth 不为 null )时,如何在 AngularFire2 中获取对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38764093/