我尝试从特定项目表单数据库中获取价值。但是,当我使用文档中的解决方案时,我会从所有项目中获得特定的价值。
离子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>
答案 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()
。>