【问题标题】:Get list of list firebase获取列表firebase列表
【发布时间】:2018-10-06 11:17:09
【问题描述】:

我在 Firebase 上创建带有数据库的 Ionic 应用程序,所以我在 Firebase 中有类似的东西,我使用 angularfire2 来获取数据

我在获取paises 时没有问题,但我尝试获取jugadores 的列表,但我什么也没得到。

这是我的.ts

export class HomePage {
paises: Observable<any[]>
constructor(public navCtrl: NavController, db: AngularFireDatabase) {
this.paises = db.list('paises').valueChanges();

 }
 }

这是我的.html

<ion-content *ngFor="let pais of paises | async">
<ion-item-group>
  <ion-item-divider color="light">{{pais.nombre}}</ion-item-divider>
  <ion-item>{{pais.jugadores.Nombre}}</ion-item>
</ion-item-group>

我确实得到了pais.nombre,但是当我尝试获取pais.jugadores 时,我得到的只是空白。因此,如果有人可以帮助我提供有关如何获取此信息提示的信息,因为我在网上搜索并没有。

【问题讨论】:

  • 你能展示一个jugadores节点的细节吗?在您的图像上,它已折叠。
  • 用 {{pais | 测试json }} 看看“pais.jugadores”里面是什么
  • 您的标识符大小写错误。

标签: angular firebase ionic-framework firebase-realtime-database angularfire2


【解决方案1】:

我猜你的数据结构是这样的。

[{
    "bandera": "http://someimage.her.png",
    "copas": 0,
    "jugadores": {
        "jugardor0001": {
            "Nombre": "alice",
            "score": 100
        },
        "jugardor0002": {
            "Nombre": "bob",
            "scoe": 80
        }
    }
}, ...]

"paises" 是可以使用 *ngFor 进行迭代的集合。

<!-- paises > collection, iterable -->
<ion-content *ngFor="let pais of paises | async">    
<ion-item-group>
  <ion-item-divider color="light">{{pais.nombre}}</ion-item-divider>

  <!-- pais.jugadores > not collection, not iterable -->
  <ion-item>{{pais.jugadores.Nombre}}</ion-item>
</ion-item-group>

pais.jugadores 是不可迭代的对象

{
    "jugardor0001": {
        "Nombre": "alice"
        "score": 100
    },
    "jugardor0002": {
        "Nombre": "bob"
        "score": 80
    }
}

我们想像这样把上面的object改为collection

[{
    "key": "jugardor0001",
    "value": {
        "Nombre": "alice",
        "score": 100
    }
}, {
    "key": "jugardor0002",
    "value": {
        "Nombre": "bob",
        "scoe": 80
    }
}]

使用“管道”将对象数组更改为集合

//pipe.keys.ts
import { Pipe, PipeTransform } from '@angular/core';

@Pipe({name: 'keys'})
export class KeysPipe implements PipeTransform {
  transform(value, args:string[]) : any {
    let keys = [];
    for (let key in value) {
      keys.push({key: key, value: value[key]});
    }
    return keys;
  }
}

//app.module.ts
...
import {KeysPipe} from './pipe.keys';
...
@NgModule({
  imports: [
    ... your import
  ],
  declarations: [
    ... your component
    KeysPipe
  ],
....

你的组件会像

<ion-content *ngFor="let pais of paises | async">
<ion-item-group>
  <ion-item-divider color="light">{{pais.nombre}}</ion-item-divider>  

  <!-- using | keys pipe to change object array to collection -->
  <ion-item *ngFor="let jugador of pais.jugadores | keys">
    {{ jugador.key }}: {{ jugador.value.Nombre }}
  </ion-item>
</ion-item-group>

stackblitz 示例是 here

【讨论】:

  • 做到了,非常感谢,所以对于列表中的每个对象,我总是必须将其解析为集合?
  • @FrankvanPuffelen 我也很好奇你的问题。无论如何都可以在不进行操作的情况下使用 angularfire2 获得嵌套集合?
  • 我也想知道,在这种情况下,使用 angularfire2 向我父母的内部对象添加数据是否相同,还是我也必须使用管道?
  • @JaimeCuellar,键管道仅用于将对象数组更改为集合以进行迭代。添加您可以像这样使用的数据 this.items2 = this.db.list('paises/Belgica/jugadores');this.items2.push({ "Nombre": "tom", "score": 99 })跨度>
猜你喜欢
  • 1970-01-01
  • 2019-07-09
  • 2019-02-04
  • 1970-01-01
  • 1970-01-01
  • 2017-03-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多