Firebase-获取单元素表单数据库

时间:2019-06-10 08:40:02

标签: javascript firebase firebase-realtime-database ionic4

我尝试从特定项目表单数据库中获取价值。但是,当我使用文档中的解决方案时,我会从所有项目中获得特定的价值。

离子4 Firebase实时数据库

数据库结构:

https://.......com/projectName/bills/
-Lh-LgSqR1vSANRnA09G{
amount: xxx
name: xxx
}
-Lh-LhZachVgF7rnqW-1{
amount: xxx
name: xxx
}
-Lh-LiyC3ve4DrKmdTEj{
amount: xxx
name: xxx
}
  getKey(){
    var refKey = firebase.database().ref('bills');
    refKey.once('value', function(snapshot){
      snapshot.forEach(function(childSnap){
        var billKey = childSnap.key;
        console.log('Key 1 ' + billKey);

      });
    });
  }

我得到这个结果:

Key 1 -Lh-LgSqR1vSANRnA09G
Key 1 -Lh-LhZachVgF7rnqW-1
Key 1 -Lh-LiyC3ve4DrKmdTEj

钥匙很好,但对于所有物品来说都是如此。

我只希望为单击的元素获得一个键,而不是为数据库中所有项目获得键。

更新:

<ion-item style="color: grey;" *ngFor='let bill of myService.bills' slot='start' lines='none' (click)='getKey()'>
<p>  {{bill.name}}:  {{ bill.amount}} zł  </p>
</ion-item>

2 个答案:

答案 0 :(得分:1)

在您的代码中,您正在循环,这就是为什么要检索所有键和键中的项目的原因。要解决您的问题,您可以执行以下操作:

  getKey(){
    var refKey = firebase.database().ref('bills').child("-Lh-LgSqR1vSANRnA09G");
    refKey.once('value', function(snapshot){
        var amount = snapshot.val().amount;
        var name   = snapshot.val().name;
    });
  }

这将获取与键"-Lh-LgSqR1vSANRnA09G"相关的数据

答案 1 :(得分:0)

您需要传递在(click)处理程序中单击过的项目:

<ion-item *ngFor='let bill of myService.bills' (click)='getKey(bill)'>

然后,您可以在函数中使用该项目中的信息:

getKey(bill){
  console.log(bill.name);
}

现在我不确定您如何填充bills,因为您没有共享该代码。但是,为了从bill中读取密钥,当您从数据库中读取密钥时,需要确保bills中的元素包含该密钥。因此,如果您当前仅使用snapshot.val()valueChanges(),则可能需要将其更改为也使用snapshot.key或使用docChanges()