typescript - 当用户登录(auth 不为 null )时,如何在 AngularFire2 中获取对象?

标签 typescript angular observable angularfire2

我想在用户登录时从 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/

相关文章:

Angular FormControl valueChanges 不起作用

angular - 如何使用重音符号/变音符号过滤 MatTable?

javascript - Angular 2 : Synching two post requests

binding - 在 knockout.js 中绑定(bind)两个 observable

javascript - 在 Vue 3 中使用 Vuex 4 模块和 TypeScript,以及如何修复循环依赖 linting 错误?

typescript - 引用我的 TypeScript 模块时出错 TS2307 : Cannot find module

reactjs - 如何让 SwitchTranition 与 TypeScript 一起使用 CSSTransition

angularjs - 将 Angular 1 与 TypeScript 和 SystemJS 结合使用的简单示例

html - No provider for ControlContainer 和 No provider for ControlContainer

angular - 带数组的 SwitchMap 运算符