如何在Firebase数据库列表中添加每个元素的值?

时间:2018-12-09 19:44:35

标签: firebase-realtime-database ionic3 angularfire2

我正在使用离子和角度的混合应用程序,并使用angularfire2将数据存储到Firebase数据库中

enter image description here

上面是firebase中列表的图像,现在我想添加列表中每个节点的 totalCalories

这是我的代码

 let count = 0;
 uList : Observable<any[]>;
 this.uList = this.dbServ.getConsumedFoodList(this.authServ.getUID()).snapshotChanges();
 this.uList.forEach(item => {
 item.forEach(itemData => {
      this.food = itemData.payload.val();
      console.log(this.food.totalCalories);
      count = count + this.food.totalCalories;
    })
  })

但是没有任何计数,它仅给出0。

1 个答案:

答案 0 :(得分:0)

您正在将uList设置为可观察的,然后再不订阅它。阅读observables and subscriptions,您将了解为什么您的代码无法正常工作。基本上,您说的是“ 这是我要收听的数据”,但实际上您从未真正开始收听。

除非您需要不断更新客户端信息,否则我建议您跳过使用.snapshotChanges() ...,除非您真的想要真正的使用,否则使用(并订阅它)是一种方法。实时更新...。为简单起见,我建议您使用.value('once')之类的方式提取数据:

let count = 0;
let uList = [];
let uid = this.authServ.getUID();

this.(AngularFireDatabaseVariable).database.ref(uid).once('value').then(dataReturnedAsObject => {
    uList = dataReturnedAsObject.val();

    uList.forEach(eachItem => {
        console.log(eachItem.totalCalories);
        count += eachItem.totalCalories;
    });

}).catch(err => {
    console.log('Error getting data from database');
    console.log(err);
});

* 未经测试的代码