无法从 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
我是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