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

Couldnot retrieve data from firebase realtime database

我是angular的初学者。当我尝试使用 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'。 类型 'Observable' 缺少类型 'AppUser' 的以下属性:名称、电子邮件、isAdmin

你所有的核心功能,例如,从数据库中获取数据,你的授权守卫应该在一个单独的模块中。我习惯称它为核心模块。我写这篇文章是因为你提到你是初学者。 所以对于这种情况,nn 你的服务文件这样做:

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

该方法只是从firebase获取用户节点下的数据。该方法 valueChanges() 它自身 returns 一个 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