AngularFire2 4.0在标题中显示用户电子邮件

时间:2017-07-25 21:16:48

标签: angular firebase firebase-realtime-database firebase-authentication angularfire2

我试图在AngularFire 2版本4.0升级文档之后的标题组件中显示用户电子邮件:https://github.com/angular/angularfire2/blob/master/docs/version-4-upgrade.md

Header.component

import { Component, OnInit } from '@angular/core';
import { AuthService } from './auth.service';
import * as firebase from 'firebase/app';
import { Observable } from 'rxjs/Observable';
import { Router } from '@angular/router';
import { AngularFireAuth } from 'angularfire2/auth';
import { AngularFireDatabase, FirebaseListObservable,FirebaseObjectObservable } from 'angularfire2/database';

@Component({
  selector: 'app-header',
  templateUrl: './header.component.html',
  styleUrls: ['./header.component.css']
})
export class HeaderComponent implements OnInit {
  user: Observable<firebase.User>;
  constructor(afAuth: AngularFireAuth) {
    this.user = afAuth.authState;
  }

了header.html

<div> {{ (user | async)? | json }} </div>

如果我这样做,我在html中获取Object对象。如果我删除括号外的问号,那么html会显示一个包含大量信息的json,包括电子邮件。 我想要的是在html中显示电子邮件,如下所示:

<div> {{ user?.email }} </div>

我的第二个问题是我在firebase数据库中也有用户电子邮件。我应该使用firebase auth或firebase数据库来显示该信息吗?如果我应该使用Firebase数据库,我该怎么做?

一如既往,感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

我偶然发现了这个问题。发生的事情是,您评估时的用户仍然是可观察的,而不是您登录的结果。一旦结算(| async),电子邮件就可用了。在你的div中,你需要把:

{{(user | async)?.email}}

就是这样。

希望有所帮助。