如何根据 Angular 6 中的 Firebase 实时数据库中的键获取单个记录

Posted

技术标签:

【中文标题】如何根据 Angular 6 中的 Firebase 实时数据库中的键获取单个记录【英文标题】:How to get single record based on key from firebase realtime databse in angular 6 【发布时间】:2019-01-20 23:36:56 【问题描述】:

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

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

我正在尝试根据$key 获取单个记录

我上传了db 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;
  

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

【问题讨论】:

你没有在getUserDetails方法中返回值 【参考方案1】:

从 AngularFireList 5.0 版开始,您必须在 list 之后链接 valueChanges 才能返回 Observable 此外,您没有在getUserDetails 方法中返回值

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

  return this.userDetails;

【讨论】:

以上是关于如何根据 Angular 6 中的 Firebase 实时数据库中的键获取单个记录的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Angular 6 + Handsontable 根据另一个单元格值仅更改一个单元格值?

根据Angular 6中的类删除元素

Angular 6:如何根据滚动突出显示导航栏上的元素?

如何根据 Angular 2 中的条件重定向到某个路由。

如何下载 Angular 6 中的 excel 文件

Angular 5,订阅firebase,第一个元素是undefined