【问题标题】:Couldnot retrieve data from firebase realtime database无法从 firebase 实时数据库中检索数据
【发布时间】:2019-11-28 12:17:57
【问题描述】:

我是 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”。 “可观察”类型缺少“AppUser”类型中的以下属性:名称、电子邮件、isAdmin

【问题讨论】:

    标签: angular firebase-realtime-database observable angularfire2


    【解决方案1】:

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

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

    该方法只是从firebase获取用户节点下的数据。方法valueChanges()它自己返回一个Observable&lt;any[]&gt;类型的可观察对象

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

    在你的 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

    【讨论】:

    • 仍然出现错误“src/app/auth.service.ts(41,6) 中的错误:错误 TS2322:类型 'Observable' 不可分配给类型 'Observable '。类型 'Subscription' 缺少类型 'AppUser' 中的以下属性:名称、电子邮件、isAdmin"
    • ts 文件:get appUser$():Observable{ return this.user$.pipe( map(user=> this.userService.get(user.uid).subscribe((res ) => { console.log(res); }))) }
    猜你喜欢
    • 1970-01-01
    • 2019-11-26
    • 2020-11-30
    • 2019-04-16
    • 2020-12-09
    • 1970-01-01
    • 2018-07-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多