无法从Firebase实时数据库检索数据

时间:2019-07-19 13:29:16

标签: angular firebase-realtime-database observable angularfire2

我是有角度的初学者。当我尝试使用AngularFireDatabase对象检索数据时,我没有获得所需格式的数据

接口:

export interface AppUser {
name: string;
email: string;
isAdmin: boolean;
}

函数调用:

 get appUser$():Observable<AppUser>{
 return this.user$.pipe(
  map(user=> this.userService.get(user.uid)))
}

userService.ts

import { Injectable } from '@angular/core';
import {AngularFireDatabase, AngularFireObject} from  angularfire2/database';
import * as firebase from 'firebase';
import {Observable} from 'rxjs/Observable'
import { AppUser } from './models/app-file';
import { AngularFireAuth } from 'angularfire2/auth';
import { map, switchMap } from 'rxjs/operators';

get (uid : string){
let result={};
this.userdetails = this.db.object('/users/'+uid).valueChanges();
return this.userdetails;

}

src / app / auth.service.ts(40,6)中的错误:错误TS2322:类型'Observable>'无法分配给类型'Observable'。   类型“可观察”缺少类型“ AppUser”中的以下属性:名称,电子邮件,isAdmin

1 个答案:

答案 0 :(得分:0)

您的所有核心功能(例如,从数据库中获取数据),身份验证卫士应位于单独的模块中。我习惯称它为核心模块。我写这篇文章是因为您提到您是一个初学者。 因此,在这种情况下,请nn您的服务文件执行以下操作:

getDataFromDb(uid) {
 return this.db.object('/users/'+ uid).valueChanges();
}

该方法只是从firebase获取用户节点下的数据。方法valueChanges()自身返回类型Observable<any[]>的可观察对象

现在,在组件的ts文件中,您应该订阅该可观察对象,并将该值声明为已定义的任何类型或接口。

并在您的ts文件中:

export class Component() {

result: AppUser;

 constructor(private service: Service) {}


dataFromService() {
 this.userService.getDataFromDb(user.uid).subscribe((res: any) => {
  this.result = res;
  })
 }
}

您在ts文件中当前正在执行的操作是使用map运算符,除非您订阅该运算符,否则不会发出该值。就您而言,您甚至不必使用pipe。只需使用subscribe即可获得可观察值。阅读文档以获得更好的理解: https://github.com/angular/angularfire2/blob/master/docs/rtdb/objects.md