首页 > 解决方案 > 如何根据 Angular 6 中的 Firebase 实时数据库中的键获取单个记录

问题描述

我正在尝试从 firebase 数据库中获取单条记录数据,但我无法从 firebase 中获取单条记录数据。

我能够将记录添加到 firebase,并且能够获取并显示在列表中的所有记录中。

我正在尝试根据$key

我上传了数据库 json在此处输入图像描述

我的依赖

在此处输入图像描述

我的详细信息页面组件

import { Component, OnInit } from '@angular/core';
import { Router, ActivatedRoute, Params } from '@angular/router';
import { UserService } from '../user.service';

 @Component({
 selector: 'app-user-details',
 templateUrl: './user-details.component.html',
 styleUrls: ['./user-details.component.css']
 })
 export class UserDetailsComponent implements OnInit {

 id: any;
 userList: any;
 imageUrl: any;

 constructor(private _user: UserService, private router: Router, private 
 arouter: ActivatedRoute) { }

ngOnInit() {
 this.id = this.arouter.snapshot.params['id'];
 console.log(this.id);
 this._user.getUserDetails(this.id)
 .subscribe(res => {
  this.userList = res;
 });
 console.log(this.userList);
 }

}

我的服务文件:

import { Injectable } from '@angular/core';
import { AngularFireDatabase, AngularFireList, FirebaseObjectObservable } 
 from 'angularfire2/database';
import { User } from './user';
import * as firebase from 'firebase';

@Injectable({
 providedIn: 'root'
})
export class UserService {

 userList:  AngularFireList<User>;
 folder: any;
 userDetails: AngularFireList<User>;

 constructor(private _fb: AngularFireDatabase) {
  this.folder = 'userProfile';
  this.userList = _fb.list('/user');
 }

 getAllUser() {
  return this.userList;
 }

 inserUser(contFrm: User){
  this.userList.push(contFrm);
 }

 getUserDetails(id) {
  this.userDetails = this._fb.list('/user'ref => ref.equalTo(id)).valueChanges());

  return this.userDetails;
  }

它没有抛出任何错误,但我无法获取记录数据。

标签: javascriptangularfirebasefirebase-realtime-databaseangular2-forms

解决方案


从 AngularFireList 5.0 版开始,您必须在返回 ObservablevalueChanges之后list进行链接,而且您没有在getUserDetails方法中返回值

getUserDetails(id) {
  this.userDetails = this._fb.list('/user', {
    query: {
      orderByChild: 'fname',
      equalTo: id
    }
  }).valueChanges();

  return this.userDetails;
}

推荐阅读