首页 > 解决方案 > 如何从AngularFire2中的列表中检索特定值

问题描述

我有一个看起来像这样的 Firebase 实时数据库:

Items:
    Object0:
        value1: "Foo-0"
        value2: "Bar-0"
    Object1:
        value1: "Foo-1"
        value2: "Bar-1"
    ...

...等等,将其削减以简化。每个“ObjectX”都包含完全相同的结构,例如 value1、value2……它们之间的唯一区别是 value1、value2 的值。

我需要从每个对象中获取 value1。我现在可以通过获取每个对象并将值分配给变量来做到这一点:

import { AngularFireDatabase } from '@angular/fire/database';
...
export class FooComponent{
  objectOne: ObjectModel = <ObjectModel>{};
  objectTwo: ObjectModel = <ObjectModel>{};

  constructor(private firebase: AngularFireDatabase) {}
  ngOnInit() {
    this.firebase
      .object('/Items/Object0')
      .valueChanges()
      .subscribe((objectm: ObjectModel ) => {
        this.objectOne = objectm; }

    this.firebase
      .object('/Items/Object1')
      .valueChanges()
      .subscribe((objectm: ObjectModel ) => {
        this.objectTwo = objectm; }

  valueOne = this.objectOne.value1; //"Foo-0"
  valueTwo = this.objectTwo.value1; //"Foo-1"
  }
}
export interface ObejctModel {
    value1: string;
    value2: string;   
  }

我想有一种更简单的方法可以使用firebase.list('/Items')而不是firebase.object,但我似乎找不到任何适合我的解决方案。谁能帮我重构这段代码,使它只使用 1 个列表而不是 2 个(或更多)对象?

此外,我必须将值分配给打字稿中的变量,而不是{{ items | async }}模板方法中的常用方法。

标签: angulartypescriptfirebasefirebase-realtime-databaseangularfire2

解决方案


您可以执行以下操作:

this.firebase.list('/Items').valueChanges().subscribe(items => {
     console.log(items);  
     items.forEach(values=>{ console.log(values) });
    });

items包含数据库中的所有对象和值。您还可以使用forEach在数组内部进行迭代,这样您就可以在不知道键的情况下value1访问。value2(Object0 and Object1)


推荐阅读