首页 > 解决方案 > 如何在firebase数据库列表中添加每个元素的值?

问题描述

我正在使用 ionic 和 Angular 开发混合应用程序,使用 angularfire2 将数据存储到 firebase 数据库

在此处输入图像描述

上面是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。

标签: firebase-realtime-databaseionic3angularfire2

解决方案


您正在设置uList为可观察对象,然后永远不会订阅它。阅读observables 和 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);
});

*未经测试的代码


推荐阅读